JAVA && Spring && SpringBoot2.x — 学习目录
SpringBoot中使用Freemarker构建邮箱模板
SpringBoot2.x整合SMTP邮件服务(配置篇)
1. javaMail概述
JavaMail是由sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。
- SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;
- POP3:用于接收电子邮件的标准协议;
- IMAP:互联网消息协议,是POP3的代替协议;
这三种协议都有对应SSL加密传输的协议,分别是SMTPS,POP3S和IMAPS。
2. SMTP协议
SMTP:简单邮件传输协议,是一个基于文本的协议。在其上指定了一个消息的一个或多个接收者(收件人和抄送人),然后消息文本会被传输。可以使用简单的telnet程序来测试一个SMTP服务器。
如今绝大多数邮件服务器都使用该协议。当你给别人发邮件时,你的服务器的某个动态端口(大于1024)就会和邮件服务器的25端口建立一个连接,你发送的邮件会通过这个连接传送到邮件服务器上,保存起来。
需要主要的是,现在国内外的大云主机商(例如:阿里云),多数不允许连接外网的25端口。不过可以使用javaMail来连接465端口进行发送邮件。
SMTP协议本身都是不安全的协议。因考虑到网络安全因素,可以使用基于SSL协议的安全邮件收发协议。即SMTPS(SMTP-over-SSL)。465端口便是基于SMTPS协议开放的。
3. JavaMail的关键对象
JavaMail作为收发邮件进行高级的抽象,形成了一些关键的接口和类。
3.1 配置类
以SMTP协议为例子
属性名 | 属性类型 | 说明 |
---|---|---|
mail.stmp.host | String | SMTP服务器地址,如smtp.qq.com |
mail.stmp.port | int | SMTP服务器端口号,默认为25 |
mail.stmp.auth | boolean | SMTP服务器是否需要用户认证,默认为false |
mail.stmp.user | String | SMTP默认的登陆用户名 |
mail.stmp.from | String | 默认的邮件发送源地址 |
mail.stmp.socketFactory.class | String | socket工厂类类名,通过设置该属性可以覆盖提供者默认的实现,必须实现javax.net.SocketFactory接口 |
mail.stmp.socketFactory.port | int | 指定socket工厂类所用的端口号,如果没有规定,则使用默认的端口号 |
mail.smtp.socketFactory.fallback | boolean | 设置为true时,当使用指定的socket类创建socket失败后,将使用Java.net.Socket创建socket,默认为true |
mail.stmp.timeout | int | I/O连接超时时间,单位为毫秒,默认为永不超时 |
3.2 SpringBoot2.x配置
自动装载的源码:org.springframework.boot.autoconfigure.mail.MailSenderPropertiesConfiguration
#集成邮件服务器
spring:
mail:
host: smtp.qq.com
port: 465 #设置端口465,因为阿里25端口默认禁用
username: 12xxxxxx@qq.com #邮箱地址
password: asdjgsadkjad #qq授权码,而非密码
default-encoding: UTF-8 #默认编码
protocol: smtp #邮件协议
properties:
mail:
smtp:
timeout: 1000 #设置邮件发送超时时间(IO连接时间)
ssl.trust: smtp.qq.com
socketFactory: #因为阿里云服务器25端口默认加密,需要改用sl加密465端口发送邮件
class: javax.net.ssl.SSLSocketFactory #SSL证书Socket工厂(指定Socket工厂)
port: 465 #设置ssl端口
fallback: true #当指定的socket工厂创建socket失败时,是否使用默认的socket工厂创建
auth: true # 设置是否需要认证,如果为true,那么用户名和密码就必须的
# 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
starttls:
enable: true
required: true
freemarker:
settings:
classic_compatible: true #解决模板空指针问题
文章参考
http://www.360doc.com/content/18/0124/10/7831345_724640547.shtml