这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」
作为一名合格的后端开发程序员,不能不会在项目中发送邮件。注册登录的邮箱验证提升项目体验,定期的巡检邮件帮助开发人员关注项目质量,必要的报警邮件降低服务宕机危害。可谓是邮件用的好,服务坏不了!
1.常见邮件协议
1.1 STMP
STMP,Simple Mail Transfer Protocl,即简单邮件传输协议,是一种从源地址到目的地址传输邮件的规范,控制邮件的发送过程和中转方式。为了减少使用过程中的垃圾邮件,STMP认证时需要提供账号和密码登录服务器。
1.2 IMAP
IMAP,Internet Message Access Protocol,即互联网邮件访问协议,该协议用于从服务器上获取和下载邮件信息。
1.3 POP3
POP3,Post Office Protocol 3,叫做邮局协议,也是一种获取和下载服务器邮件信息的协议。与IMAP协议不同的是,POP3是一种单向通信,客户端可以从服务器中获取信息,但是客户端的操作并不会同步到服务器中;而IMAP协议是一种双向通信的协议。
2. 邮箱授权码
使用邮箱发送邮件时,可以使用账号+密码的方式登录邮箱,也可以使用账号+授权码的方式登录。其中授权码使用更加灵活,不需要暴露真实密码信- POP3/SMTP/IMAP息,保证安全性。
2.1 @163邮箱
以163邮箱为例,网页版登录邮箱之后,点击设置 -> POP3/SMTP/IMAP选项,进入页面后可以开启IMAP/SMTP服务和POP3/SMTP服务,开启后在页面中管理授权密码。
3. SpringBoot中邮件使用流程
3.1 引入依赖信息
SpringBoot中为邮件服务提供了专门的启动器依赖包,只需要在maven项目的pom.xml文件中引入即可使用提供的邮件服务。
<!--邮件依赖信息-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3.2 增加配置信息
使用邮件服务时,需要提供邮箱账号和密码(或授权码)来登录后发送邮件,相关信息只需要配置在SpringBoot的application.properties配置文件中即可。
#SMTP服务器地址
spring.mail.host= smtp.163.com
# 账号
spring.mail.username= xxxx
# 登录密码或授权密码
spring.mail.password= VBBDHWGAAAAAAA
# 邮件编码
spring.mail.default-encoding=UTF-8
# 发送邮件账号
spring.mail.properties.from = xxxx@163.com
3.3 JavaMailSender
SpringBoot中提供了集成邮件服务的JavaMailSender接口和其实现类JavaMailSenderImpl,可以快速高效的完成邮件的发送。
实际使用时,只需要将JavaMailSender注入,定义其中需要的相关属性并发送邮件到指定邮箱即可。
3.4 邮件发送逻辑处理
定义一个MailService用来执行属性赋值和发送邮件的逻辑
@Component
public class MailService{
private final Logger logger = LoggerFactory.getLogger(MailService.getClass());
@Autowired
private JavaMailSender mailSender;
@Value("${mail.fromMail.from}")
private String from;
public void sendMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
mailSender.send(message);
} catch (Exception e) {
logger.error("发送邮件时发生异常!", e);
}
}
}
其中,邮箱账户密码等信息会根据文件中的设置自动配置,发送邮件邮箱通过@Value注解获取注入字段中,其他信息在调用sendMail()方法时作为参数传递。
3.5 发送邮件
定义测试类,测试邮件发送功能。
@SpringBootTest
public class MailServiceTest {
@Autowired
private MailService MailService;
@Test
public void testSendMail() throws Exception {
MailService.sendMail("123123@qq.com","test mail"," hello jue jin!");
}
}
执行单元测试后,目标邮箱中会收到邮件信息。