前言
邮件发送是一个非常常见的需求,用户注册(验证码功能),找回密码等地方都可以用到。Spring Boot 中对于邮件发送,提供了相关的自动化配置类,使得邮件发送变得非常容易。本文快速介绍如何用SpringBoot发送简单邮件。
一、邮件协议
SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。
POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则。
假设从 a@qq.com 发送邮件到 b@163.com :
1.a先将邮件投递到腾讯的邮件服务器
2.腾讯的邮件服务器将a的邮件投递到网易的邮件服务器
3.b 登录网易的邮件服务器读取邮件
1和2使用了 SMTP 协议,SMTP 服务器就是用来投递邮件
如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成,就是3步骤
二、准备工作
发送之前要先申请授权码,这里以 QQ 邮箱为例,向大家演示授权码的申请流程
1.登录 QQ 邮箱网页版,点击设置按钮
2.账户选项卡中开启POP3/SMTP选项
按照系统提示操作,开启成功之后,即可获取一个授权码,复制该授权码,下面会使用。
三、项目代码
1.在springboot项目中添加发送邮件的相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.配置邮箱基本信息
spring:
mail:
# 配置 SMTP 服务器地址
host: smtp.qq.com
# 发送者邮箱
username: 1971xxxxxx@qq.com
# 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
password: xxxxxxxxxxx
# 端口号465或587
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
# 配置SSL 加密工厂
properties:
mail:
smtp:
socketFactoryClass: javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
debug: true
做完这些之后,Spring Boot 就会自动帮我们配置好邮件发送类(JavaMailSender),我们直接注入使用即可。
3.测试代码(自己发给自己测试)
@SpringBootTest
class DemoApplicationTests {
@Autowired
JavaMailSender javaMailSender;
/**
* 普通邮件发送
*/
@Test
public void sendSimpleMail() {
// 构建一个邮件对象
SimpleMailMessage message = new SimpleMailMessage();
// 设置邮件主题
message.setSubject("你好,这是一封测试邮件");
// 设置邮件发送者,这个跟application.yml中设置的要一致
message.setFrom("1971xxxxxx@qq.com");
// 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
// message.setTo("10*****16@qq.com","12****32*qq.com");
message.setTo("1971xxxxxx@qq.com");
//生成四位验证码,模拟验证码功能
Random random=new Random();
int verify=random.nextInt(9000)+1000;
// 设置邮件抄送人,可以有多个抄送人
//message.setCc("12****32*qq.com");
// 设置隐秘抄送人,可以有多个
//message.setBcc("7******9@qq.com");
// 设置邮件发送日期
message.setSentDate(new Date());
// 设置邮件的正文
message.setText("你的验证码为:"+verify+",注意有效期为5分钟");
// 发送邮件
javaMailSender.send(message);
}
}
4.测试结果
可以看到邮件已经成功通过JAVA代码发送到了指定邮箱中
总结
本文介绍了简单的邮件发送形式。SpringBoot还可以发送带有附加,带有图片的邮件。如果邮件的内容比较丰富,还可以是通过 HTML 来呈现。使用 Thymeleaf 来构建邮件模板,Thymeleaf 的自动化配置提供了一个 TemplateEngine,通过 TemplateEngine 可以很方便的将 Thymeleaf 模板渲染为 HTML,读者可以自行阅读相关资料学习。