一、前言
在今天,发送邮件几乎已成为每个网站必不可少的功能之一,如忘记密码,服务器异常警告通知,微服务中服务下线通知等等。接下来,笔者将会给同学们介绍使用spring boot1分钟内如何快速集成邮件服务。
Spring Mail抽象的核心是MailSender接口,MailSender的实现可以把Email发送给邮件服务器,由邮件服务器实现邮件发送的功能。
二、获取邮箱授权码
· QQ邮箱获取授权码步骤
1、登录qq邮箱,进入主页点击设置
2、点击账号
3、开通相应的邮件协议,获取授权码
· 163邮箱获取授权码步骤
1、同理,在163邮箱的设置中开通相应的邮件协议,获取授权码
三、搭建步骤及简单使用
笔者将以qq邮箱为例,实现邮件发送功能。
· 增加pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
· 增加application.yml的配置
spring:
application:
name: mail-sender
mail:
host: smtp.qq.com #发送邮件服务器
username: xxxxxxx@qq.com #ali邮箱
password: xxxxxxxxxx #客户端授权码
protocol: smtp #发送邮件协议
properties.mail.smtp.auth: true
properties.mail.smtp.port: 465 #端口号465或587
properties.mail.smtp.starttls.enable: true
properties.mail.smtp.starttls.required: true
properties.mail.smtp.ssl.enable: true
default-encoding: utf-8
server:
port: 8081
· 邮件发送
话不多,下面直接上代码
1、文本邮件发送
@SpringBootTest
@RunWith(SpringRunner.class)
public class MailSenderApplicationTests {
@Autowired
private MailSender mailSender;
@Test
public void contextLoads() {
sendTextEmail();
}
public void sendTextEmail() {
SimpleMailMessage mimeMessage =new SimpleMailMessage();
mimeMessage.setFrom("xxxxx@qq.com");
mimeMessage.setTo("xxxxxx@163.com");
mimeMessage.setSubject("邮件测试");
mimeMessage.setText("Hello World");
mailSender.send(mimeMessage);
}
}
如下图所示,则说明邮件发送成功
2、附件邮件发送
这里需要注意与文本邮件不同的是,附件邮件发送需要使用JavaMailSender接口
@SpringBootTest
@RunWith(SpringRunner.class)
public class MailSenderApplicationTests {
@Autowired
private JavaMailSender javaMailSender;
@Test
public void contextLoads() throws MessagingException {
sendMiMultipartEmail();
}
public void sendMiMultipartEmail() throws MessagingException {
MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
mimeMessageHelper.setFrom("964549507@qq.com");
mimeMessageHelper.setTo("15389078260@163.com");
mimeMessageHelper.setSubject("附件邮件测试");
mimeMessageHelper.setText("附件邮件测试");
mimeMessageHelper.addAttachment("test.png", new ClassPathResource("static/test.png"));
javaMailSender.send(mimeMailMessage);
}
}
如下图所示,则说明邮件发送成功
3、富文本邮件发送
上面两种发送邮件的方式,邮件内容没有任何的样式,大多时候并不能满足我们的需求。下来,笔者将介绍如何将邮件文本设置为HTML发送。
@SpringBootTest
@RunWith(SpringRunner.class)
public class MailSenderApplicationTests {
@Autowired
private JavaMailSender javaMailSender;
@Test
public void contextLoads() throws MessagingException {
sendHtmlEmail();
}
public void sendHtmlEmail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom("964549507@qq.com");
mimeMessageHelper.setTo("15389078260@163.com");
mimeMessageHelper.setSubject("富文本邮件测试");
String html = "<html><body><h2>富文本邮件测试</h2><img width=100 height=100 src='cid:test' /></body></html>";
mimeMessageHelper.setText(html, true);
// 设置内嵌元素 cid,第一个参数表示内联图片的标识符,第二个参数标识资源引用
mimeMessageHelper.addInline("test", new ClassPathResource("static/test.jpg"));
javaMailSender.send(mimeMessage);
}
}
如下图所示,则说明邮件发送成功
4、使用Thymeleaf模板发送邮件
虽然使用富文本发送邮件也可以渲染邮件内容的样式,但是在代码中拼接HTML字符串是一件非常痛苦的事情,而且也非常容易出错。
因此,Spring Boot给出的解决方案是使用模板生产HTML, 笔者在下文将介绍使用Thymeleaf模板发送邮件(假设同学们已了解并掌握Thymeleaf)。
·引入Thymeleaf pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
·Thymeleaf模板email.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Email</title>
</head>
<body>
<img src='cid:test'>
<h4><span th:text="${title}">Craig Walls</span> says... </h4>
<i><span th:text="${content}">Hello Boot!</span></i>
</body>
</html>
·发送Thymeleaf模板的邮件
@SpringBootTest
@RunWith(SpringRunner.class)
public class MailSenderApplicationTests {
@Autowired
private JavaMailSender javaMailSender;
@Autowired
private SpringTemplateEngine templateEngine;
@Test
public void contextLoads() throws MessagingException {
sendThymeleafEmail();
}
public void sendThymeleafEmail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
mimeMessageHelper.setFrom("964549507@qq.com");
mimeMessageHelper.setTo("15389078260@163.com");
mimeMessageHelper.setSubject("ThymeLeaf模板邮件测试");
// 利用 Thymeleaf 模板构建 html 文本
Context ctx = new Context();
ctx.setVariable("title", "ThymeLeaf模板邮件测试");
ctx.setVariable("content", "Hello World!");
String emailText = templateEngine.process("email", ctx);
mimeMessageHelper.setText(emailText, true);
// 设置内嵌元素 cid,第一个参数表示内联图片的标识符,第二个参数标识资源引用
mimeMessageHelper.addInline("test", new ClassPathResource("static/test.jpg"));
javaMailSender.send(mimeMessage);
}
}
如下图所示,则说明邮件发送成功
四、总结
使用Spring Boot实现邮件发送功能非常的简单快捷,通过上文的学习,再经过自己的实践,想必同学们以后实现发送邮件功能也是信手拈来的事。