Springboot下实现邮件发送功能
Springboot下实现邮件发送功能
一、几种邮件协议简介
1.SMTP协议
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
2.POP3协议
POP3(Post Office Protocol 3,邮局协议的第3个版本)规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件。POP3服务器则是遵循POP3协议的接收邮件服务器,主要用来接收电子邮件。
3.IMAP协议
IMAP(Internet Mail Access Protocol,交互式邮件存取协议)是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
二、基于SMTP协议发送邮件
2.代码实现
(1)创建一个Springboot工程
创建完成后,项目依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
(2)编写配置文件
项目创建成功后,接下来编辑applicaton.properties配置文件:
配置含义如下:
-
配置 SMTP 服务器地址 SMTP 服务器的端口 配置邮箱用户名 配置密码,注意,不是真正的密码,而是刚刚申请到的授权码 默认的邮件编码 配置 SSL 加密工厂 表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
如果不知道 smtp 服务器的端口或者地址的的话,可以参考腾讯的邮箱文档
(3)与发送邮件相关的几个类
在编写代码前,先来了解两个类:JavaMailSender接口类 、SimpleMailMessage类。
JavaMailSender接口类定义了邮件发送的send方法,以及创建MimeMessage的方法,但这个接口类并不需要我们自己实现,实现类JavaMailSenderImpl由SpringBoot根据配置文件自动装填各个属性。
SimpleMailMessage类是一个邮件消息实体类,包含的成员变量如下:
(4)发送简单邮件
(5)发送带附件的邮件
(4)发送正文带图片的邮件
需要注意两个地方:
-
new MimeMessageHelper类时,第一个参数是MimeMessage实例,第二个参数是是否启用“复杂”消息,默认为false,需要设置为true,这样子消息中才能携带图片资源。 调用setText方法时,第一个参数是消息内容,如果带有HTML,那么第二个参数需要设置为true,表示启用HTML,否则邮件内容会解析失败。
(6)用Thymeleaf自定义邮件模板
Thymeleaf模板:mail.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org/"> <head> <meta charset="UTF-8"> <title>Thymeleaf邮件模板</title> </head> <body> <table border="1px"> <tr> <td>碰头时间</td> <td th:text="${time}"></td> </tr> <tr> <td>碰头地点</td> <td th:text="${address}"></td> </tr> <tr> <td>暗号</td> <td th:text="${marker}"></td> </tr> </table> </body> </html>
参考资料
[1]: