application.yml
mail:
# QQ邮箱 smtp.qq.com 网易 smtp.163.com 谷歌 smtp.gmail.com
host: smtp.163.com
username: ******@163.com
# 这里不是邮箱密码 是授权码
password: ******
default-encoding: UTF-8
protocol: smtp
properties:
mail:
smtp:
timeout: 10000
auth: true
starttls:
enable: true
required: true
socketFactory:
port: 465
class: javax.net.ssl.SSLSocketFactory
fallBack: false
jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>${mail.version}</version>
</dependency>
实现
package com.baihai.loan.utils.Mail;
import com.baihai.loan.config.BizConfig;
import com.baihai.loan.exception.SystemException;
import freemarker.template.Configuration;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import javax.annotation.Resource;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Map;
/**
* @author guanyu
* @date 2021/8/18 - 16:16
*/
@Slf4j
@Component
public class MailHandler {
@Resource
private JavaMailSender javaMailSender;
public void sendTextMail(MailModel mail) {
//建立邮件消息
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(BizConfig.eMailUserName);
message.setSubject(mail.getSubject());
message.setTo(mail.getTo());
message.setText(mail.getText());
try {
javaMailSender.send(message);
} catch (Exception e) {
log.error("纯文本邮件发送失败->message:{}", e.getMessage());
throw new SystemException("邮件发送失败");
}
}
/**
* 发送的邮件是富文本(附件,图片,html等)
*
* @param mailDO
* @param isShowHtml 是否解析html
*/
public void sendHtmlMail(MailModel mailDO, boolean isShowHtml) {
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//是否发送的邮件是富文本(附件,图片,html等)
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
messageHelper.setFrom(BizConfig.eMailUserName);
messageHelper.setTo(mailDO.getTo());
messageHelper.setSubject(mailDO.getSubject());
messageHelper.setText(mailDO.getText(), isShowHtml);
//判断是否有附加图片等
if (mailDO.getAttachment() != null && mailDO.getAttachment().size() > 0) {
mailDO.getAttachment().entrySet().stream().forEach(entrySet -> {
try {
File file = new File(String.valueOf(entrySet.getValue()));
if (file.exists()) {
messageHelper.addAttachment(entrySet.getKey(), new FileSystemResource(file));
}
} catch (Exception e) {
log.error("附件发送失败->message:{}", e.getMessage());
throw new SystemException("附件发送失败");
}
});
}
//发送
javaMailSender.send(mimeMessage);
} catch (Exception e) {
log.error("富文本邮件发送失败->message:{}", e.getMessage());
throw new SystemException("邮件发送失败");
}
}
/**
* 模板邮件
*
* @param mail 邮件基本参数
* @param params 模板参数
*/
public void sendTemplatesMail(MailModel mail, Map<String, Object> params) {
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(BizConfig.eMailUserName);
helper.setTo(mail.getTo());
Configuration configuration = new Configuration(Configuration.VERSION_2_3_28);
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
String html = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), params);
helper.setSubject(mail.getSubject());
helper.setText(html, true);
javaMailSender.send(mimeMessage);
} catch (Exception e) {
log.error("模板邮件发送失败->message:{}", e.getMessage());
throw new SystemException("邮件发送失败");
}
}
}
test
@Test
public void sendTextMail() {
MailModel model = new MailModel();
model.setSubject("简单文本测试");
model.setTo("****@qq.com");
model.setText("简单测试");
mailHandler.sendTextMail(model);
}
@Test
public void sendHtmlMail() {
MailModel model = new MailModel();
model.setSubject("附件测试");
model.setTo("***@qq.com");
model.setText("附件测试");
Map<String, Object> map = new HashMap<>();
map.put("test.xlsx", "F:\\BaiduNetdiskDownload\\test.xlsx");
model.setAttachment(map);
mailHandler.sendHtmlMail(model, false);
}
@Test
public void sendTemplatesMail() {
MailModel model = new MailModel();
model.setSubject("模板测试");
model.setTo("****@qq.com");
Map<String, Object> map = new HashMap<>();
map.put("username", "张三");
model.setAttachment(map);
mailHandler.sendTemplatesMail(model, map);
}
模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<html>
<h3>你好, <span style="color: #ff0000;">${username}</span>, 这是一封模板邮件!</h3>
</html>
</body>
</html>