Spring boot mail是spring-boot框架专门发送邮件的一个模块,它对java的原生邮件API进行了封装,使操作更加简单,配置更加容易。只需要三步,即可解决邮件发送。
1)老样子,先加依赖。去maven中心仓库,搜索 spring-boot-starter-mail, 找到你想用的版本,复制dependency代码,大概这个样子: (当然别忘了要有版本号的哈 <version>x.xx</version>)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2) 在application.yml 或者application.properties加入邮件服务器的配置,这里我用yml文件做示例:
spring:
mail:
host: smtp.qq.com
username: test@qq.com
password: XXXXXXXX
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
NOTE: 要先配置一下邮箱哈,确保邮箱账号启用了POP3协议,如果没有启用,先去邮箱把它启用。这里的密码是授权码,启用成功页面会显示的。下图是QQ邮箱的,其他邮箱操作大致也差不多。
3) 需要写一点简单的测试代码,比如我们要发送一个简单的邮件(没有附件,没有富文本):
@Autowired
private JavaMailSender javaMailSender;
public void sendSimpleMail() {
SimpleMailMessage mail = new SimpleMailMessage();
mail.setFrom("shachuweilai@qq.com");
mail.setTo("894242586@qq.com");
mail.setSubject("这是邮件主题");
mail.setText("这是邮件内容");
javaMailSender.send(mail);
}
现在我们发送一个复杂一点的邮件,包括附件和HTML内容(注意附件的路径替换成一个真实路径):
public void sendMimeMail() {
MimeMessage message = javaMailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom("shachuweilai@qq.com");
helper.setTo("894242586@qq.com");
helper.setSubject("这是邮件主题");
helper.setText("<h1> HTML富文本内容 </h1>", true);//第二个参数true,表示发送HTML文本
helper.addAttachment("测试附件.xlsx", new File("F:\test.xlsx"));
javaMailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
e.printStackTrace();
}
}
OK了,简单三步,搞定!
另外,如果碰到连接超时或者读取服务器信息超时的情况可以加入下面的配置:
spring:
mail:
host: XXX port: 25 username: XXX password: XXX properties: mail: smtp: auth: true starttls: enable: true required: true timeout: 300000 connectiontimeout: 300000
peroperties格式版本:
spring.mail.properties.mail.smtp.timeout=300000
spring.mail.properties.mail.smtp.connectiontimeout=300000