1.简单的 邮件发送
1.1引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
1.2配置参数
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=发送人邮箱
spring.mail.password=授权码
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
1.3邮件发送的几种方式
1.3.1简单的邮件发送
通过new SimpleMailMessage对象发送邮件
@Autowired JavaMailSender javaMailSender;\
@Test
public void contextLoads() {
// 简单邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
msg.setSubject("这是测试邮件主题");
msg.setText("这是测试邮件内容");
msg.setFrom("2354827879@qq.com"); // 发件人邮箱
msg.setSentDate(new Date());
msg.setTo("2354827879@qq.com"); //收件人邮箱
javaMailSender.send(msg); //发送邮件
}
1.3.2带附件的邮件发送
@Autowired
JavaMailSender javaMailSender;
// 带附件发邮件 需要采用helper辅助实现邮件发送
@Test
public void test1() throws MessagingException {
MimeMessage msg = javaMailSender.createMimeMessage();
// helper辅助工具,帮助配置邮件内容
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setSubject("这是测试邮件主题(带附件)");
helper.setText("这是测试邮件内容(带附件)",true);
helper.setFrom("2354827879@qq.com");
helper.setSentDate(new Date());
helper.setTo("2354827879@qq.com");
helper.addAttachment("javaboy.png", new File("E:\桌面\mail.png"));// 附件的名字和具体的附件对象
javaMailSender.send(msg);
}
1.3.3邮件正文携带图片
@Autowired
JavaMailSender javaMailSender;
// 邮件的正文携带图片
@Test
public void test2() throws MessagingException {
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setSubject("这是测试邮件主题(带图片)");
// 注意这里从cid和下面的addInline一样
helper.setText("这是测试邮件内容(带图片),这是第一张图片:<img src='cid:p01'/>,这是第二张图片:<img src='cid:p02'/>", true);
helper.setFrom("2354827879@qq.com");
helper.setSentDate(new Date());
helper.setTo("2354827879@qq.com");
helper.addInline("p01", new FileSystemResource(new File("E:\桌面\mail.png")));
helper.addInline("p02", new FileSystemResource(new File("E:\桌面\redis.png")));
javaMailSender.send(msg);
}
1.3.4使用thymeleaf模板引擎作为邮件发送模板 (相对简单,有自动化配置)
@Autowired
JavaMailSender javaMailSender;
@Autowired
TemplateEngine templateEngine;
// 使用thymeleaf模板引擎作为邮件发送模板
@Test
public void test3() throws MessagingException {
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setSubject("这是测试邮件主题(thymeleaf)");
// 邮件模板的生成
Context context = new Context();
context.setVariable("username", "javaboy");
context.setVariable("position", "Java工程师");
context.setVariable("dep", "产品研发部");
context.setVariable("salary", 999999);
context.setVariable("joblevel", "高级工程师");
String process = templateEngine.process("mail.html", context);
helper.setText(process, true);
helper.setFrom("2354827879@qq.com");
helper.setSentDate(new Date());
helper.setTo("2354827879@qq.com");
javaMailSender.send(msg);
}
mail.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
hello <span th:text="${username}"></span>,欢迎加入 XXX 大家庭!
</div>
您的入职信息如下:
<table border="1">
<tr>
<td>职位</td>
<td th:text="${position}"></td>
</tr>
<tr>
<td>职称</td>
<td th:text="${joblevel}"></td>
</tr>
<tr>
<td>薪水</td>
<td th:text="${salary}"></td>
</tr>
<tr>
<td>部门</td>
<td th:text="${dep}"></td>
</tr>
</table>
<div style="color: #ff1a0e;font-size: 20px">希望在未来的日子里,携手共进!</div>
</body>
</html>
1.3.5使用freemarker做邮件模板
@Autowired
JavaMailSender javaMailSender;
@Test
public void test4() throws MessagingException, IOException, TemplateException {
MimeMessage msg = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true);
helper.setSubject("这是测试邮件主题(freemarker)");
// 传递freemarker的版本
Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
// 设置模板的位置
configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),"templates");
// 指定模板的名字
Template template = configuration.getTemplate("mail.ftl");
// 邮件模板的生成
Map<String, Object> map = new HashMap<>();
map.put("username", "javaboy");
map.put("position", "Java工程师");
map.put("dep", "产品研发部");
map.put("salary", 999999);
map.put("joblevel", "高级工程师");
StringWriter out = new StringWriter();
// 输出流
template.process(map, out);
helper.setText(out.toString(), true);
helper.setFrom("2354827879@qq.com");
helper.setSentDate(new Date());
helper.setTo("2354827879@qq.com");
javaMailSender.send(msg);
}
mail.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>freemarker</h1>
<div>
hello${username},欢迎加入 XXX 大家庭!
</div>
您的入职信息如下:
<table border="1">
<tr>
<td>职位</td>
<td>${position}</td>
</tr>
<tr>
<td>职称</td>
<td>${joblevel}</td>
</tr>
<tr>
<td>薪水</td>
<td>${salary}</td>
</tr>
<tr>
<td>部门</td>
<td>${dep}</td>
</tr>
</table>
<div style="color: #ff1a0e;font-size: 20px">希望在未来的日子里,携手共进!</div>
</body>
</html>