导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring配置文件
MailProperties.java
DEFAULT_CHARSET =StandardCharsets.UTF_8;
* SMTP server host. For instance,'smtp.example.com'.
host
* SMTP server port.
Integer port
* Login user of the SMTP server.
String username
* Login password of the SMTP server.
String password
* Protocol used by the SMTP server.
String protocol ="smtp"
* Default MimeMessage encoding.
CharsetdefaultEncoding = DEFAULT_CHARSET
* Additional JavaMail Session properties.
final Map<String,String> properties = new HashMap<>()
* Session JNDI name. When set, takesprecedence over other Session settings.
String jndiName;
spring:
mail:
host:smtp.qq.com#邮件服务器地址
port:587#邮件服务器端口
protocol:smtp#使用的协议
default-encoding:UTF-8#默认编码
username:#这个是通过邮件服务器认证的用户名和密码,不一定是邮箱,看服务器的要求
password:#密码/授权码
properties:#properties中的属性都是比较灵活可配置的,其实是javax.mail.Session中对应的配置项,可以参考对应文档
mail.smtp.auth:true#如果邮件服务器需要实名需要认证开启此选项
邮件发送Java代码实现
@Autowired
JavaMailSender javaMailSender;
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(message, true);
mimeMessageHelper.setFrom(from);//发件人(不填可能会导致发件人空)
mimeMessageHelper.setTo(InternetAddress[]);//收件人
mimeMessageHelper.setSubject(subject);//标题
mimeMessageHelper.setText(content);//正文
mimeMessageHelper.addAttachment(fileName, file);//附件
mimeMessageHelper.setSentDate(sentDate);//发件时间,部分邮箱不生效
mimeMessageHelper.setCc(cc);//抄送
mimeMessageHelper.setBcc(bcc);//加密抄送(不会在抄送人中显示)
mimeMessageHelper.setPriority(priority);//between1(highest)and5(lowest)
javaMailSender.send(message);
经测试,mimeMessageHelper中 setReplyTo(), addInline()不生效
mimeMessageHelper.setFrom(InternetAddress);//发件人
与mimeMessageHelper.setTo(InternetAddress[]);//收件人
可传入String类型或InternetAddress类型,
当传入InternetAddress类型时可自行设置接收邮件时显示的发件人名称或接收人名称,否则可能会被接收方默认邮箱地址@前部分为名称。
可以不设置setFrom,但发件人位置会显示空。
new InternetAddress("xxx@xx.com", "XXX", "UTF-8")
//类似
mimeMessageHelper.setFrom(new InternetAddress("xxx@xx.com", "XXX", "UTF-8"));
接收邮件服务器:pop.qq.com,使用SSL,端口号995
发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587(测试中465发送失败)
From: 帮助系统 (qq.com)
发送方端口号大部分为25,建议查问服务提供方帮助。
邮件协议框架 RFC822 + MIME解析
参考:RFC822:电子邮件的基本框架_51CTO博客_rfc822邮件格式
类似http请求分具体的头和内容。
header包括上面提及的配置项,ASCII格式,可通过message.getAllHeaderLines()查看设置后的内容。
content为具体的邮件内容,RFC822协议仅支持字符串。因此对邮件附件,图片之类的发送需要通过MIME实现。
Spring boot 的JMS配置参数与Javax.mail的参数基本一致,大部分情况下可以参考javax.mail的配置
javax.mail实现邮件发送
参考: