讲解了日志相关的知识点后。今天来点相对简单的,一般上,我们在开发一些注册功能、发送验证码或者订单服务时,都会通过短信或者邮件的方式通知消费者,注册或者订单的相关信息。而且基本上邮件的内容都是模版,一些差异化的可根据实际情况来进行替换。比如12306购票成功后,会发送一封购票信息邮件;在京东下单成功后,也会收到一封包含订单的邮件。所以,今天就来讲讲如何利用Spring提供的JavaMailSender接口,实现邮件发送功能。
一点知识
讲解前,我们先来简单了解下相关邮件知识。
JavaMail介绍
JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。而JavaMailSender底层也是基于JavaMailjar包的,官网介绍时就说了依赖关系:
邮件通信协议
SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;
POP3:用于接收电子邮件的标准协议;
IMAP:互联网消息协议,是POP3的替代协议。
这三种协议都有对应SSL加密传输的协议,分别是SMTPS,POP3S和IMAPS。除JavaMail服务提供程序之外,JavaMail还需要JAF(JavaBeans Activation Framework)来处理不是纯文本的邮件内容,这包括MIME(多用途互联网邮件扩展)、URL页面和文件附件等内容。
JavaMail关键对象
Properties:属性对象。针对不同的的邮件协议,JavaMail规定了服务提供者必须支持一系列属性。
Session会话对象
这个不要混淆了,和web中的session不一样的,简单来说,它就是配置的集合。
Session的主要作用包括两个方面:
接收各种配置属性信息:通过Properties对象设置的属性信息;
初始化JavaMail环境:根据JavaMail的配置文件,初始化JavaMail环境,以便通过Session对象创建其他重要类的实例。
Transport和Store:传输和存储
邮件操作只有发送或接收两种处理方式,JavaMail将这两种不同操作描述为传输(javax.mail.Transport)和存储(javax.mail.Store),传输对应邮件的发送,而存储对应邮件的接收。
Message:消息对象
一旦获得Session对象,就可以继续创建要发送的消息。Message是个抽象类,常用的实现类为:javax.mail.internet.MimeMessage(下文中使用它来实现附件发送)。
Address:地址
创建了Session和Message,并将内容填入消息后,就可以用Address确定信件地址了。Address也是个抽象类。对应常用实现类:javax.mail.internet.InternetAddress。
其他相关信息,可点击查看:https://blog.csdn.net/a2241076850/article/details/52856863讲解的比较清楚。这里就不阐述了(本人也是不甚了解,只是写这篇文章时,有搜索了些相关资料)
Spring封装后,使用起来基本上都不需要去关心这些对象值了,简单了解下即可。当然了,有兴趣,可以搜索下相关资料。也可以去官网查看:https://java.net/projects/javamail/pages/Home
SpringBoot中,集成邮件发送功能,是很简单的。只需引入spring-boot-starter-mail即可,以下就简单的介绍下如何发送不同格式的邮件,已满足不同的业务需求。
前提条件
0.加入pom依赖
1.配置文件加入相关配置信息,如发送方邮箱信息等。
# 邮件相关 # SMTP服务器地址 spring.mail.host=smtp.qq.com # SMTP服务器端口号 # spring.mail.port=25 # 发送方帐号 spring.mail.username=邮箱 # 发送方密码(授权码) spring.mail.password=邮箱密码 #javaMailProperties 配置 # 开启用户身份验证 spring.mail.properties.mail.smtp.auth=true # STARTTLS:一种通信协议,具体可以搜索下 #spring.mail.properties.mail.smtp.starttls.enable=true #spring.mail.properties.mail.smtp.starttls.required=true这里需要注意:使用QQ邮箱发送时,需要开通POP3/SMTP服务,邮箱密码是填写授权码的,而不是邮箱密码,这个需要注意下。具体网站说明:在设置-->账户-->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务有说明,大家可自行获取授权码。
关于JavaMailSender使用文档,可以查看官网指南:。
3.引入JavaMailSender接口对象,已经自动注入了,只需引入即可。
@Autowired private JavaMailSender mailSender;具体可查看spring-boot-autoconfigurejar包下的org.springframework.boot.autoconfigure.mail类,里面已经引入了JavaMailSenderImpl实现类了。
纯文本格式