spring boot 集成邮件发送功能
其实spring boot 集成邮件发送是一个很简单的功能,里面封装的都是完善。在此记录一下小的问题。
1 qq邮箱 、163邮箱不支持用户名与密码配置模式,需要开启授权码模式
spring:
mail:
enable: true
username: 10@qq.com
password: # 授权码
host: smtp.qq.com
port: 587
title: 通知
template: 你好:</br> 有一条待办需要处理
附件 发送报错
JavaMail requires an InputStreamSource that creates a fresh stream for every
使用一下写法排除
@Slf4j
@Component
@RefreshScope
@ConditionalOnExpression("${spring.mail.enable:false}")
public class LcfcMailComponent {
@Autowired
JavaMailSender mailSender;
@Autowired
MailConfig mailConfig;
/**
* 配饰采用默认配置邮件主题,邮件内容
* @param tos 邮件接收人
*/
@Async
public void sendHtmlMail(String... tos){
sendHtmlMail(mailConfig.getTitle(),mailConfig.getTemplate(),null,tos);
}
/**
* 配饰采用默认配置邮件主题,邮件内容
* @param file 附件
* @param tos 邮件接收人
*/
@Async
public void sendHtmlMail(Map<String, InputStream> file,String... tos){
sendHtmlMail(mailConfig.getTitle(),mailConfig.getTemplate(),file,tos);
}
/**
*
* @param title 邮件主题
* @param content 邮件内容,默认配置的模板
* @param file 文件
* @param tos 接收人
*/
@Async
public void sendHtmlMail(String title, String content, Map<String, InputStream> file, String... tos){
//获取MimeMessage对象
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper;
try {
messageHelper = new MimeMessageHelper(message, true);
//邮件发送人
messageHelper.setFrom(mailConfig.getUsername());
//邮件接收人
messageHelper.setTo(tos);
//邮件主题
if (StringUtils.isEmpty(title)){
title = mailConfig.getTitle();
}
message.setSubject(title);
//邮件内容,html格式
if (StringUtils.isEmpty(content)){
content = mailConfig.getTemplate();
}
if (file!=null&&!file.isEmpty()){
file.forEach((k,v)->{
try {
messageHelper.addAttachment(k,new ByteArrayResource(IOUtils.toByteArray(v)));
} catch (MessagingException | IOException e) {
log.error("邮件增加附件出错{}",e.getMessage());
// e.printStackTrace();
}
});
}
messageHelper.setText(content,true);
//发送
mailSender.send(message);
log.debug("发送完毕");
if (file!=null&&!file.isEmpty()){
file.values().forEach(x->{
try {
x.close();
} catch (IOException e) {
log.error("关闭;流发生错误{}",e.getMessage());
// e.printStackTrace();
}
});
}
//日志信息
} catch (MessagingException e) {
e.printStackTrace();
log.error("邮箱发送发生错误={}",e.getCause());
}
}
}
项目依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>