邮件使用场景
-
注册验证
-
网站营销
-
安全的最后一道防线(找回账户密码)
-
提醒、监控告警
- 触发机制
邮件发送原理
-
邮件传输协议:SMTP协议和POP3协议
- 内容不断发展:IMAP协议和Mime协议
邮件发送历史
-
1969年10月,世界上的第一封电子邮件
-
1987年9月14日中国的第一封电子邮件
-
30年发展历史
-
Java发送邮件
- Spring发送邮件
Spring Boot介绍
-
约定大于配置
-
简单快速开发
-
强大的生态链
- Spring Boot和发送邮件
前置知识
-
会使用Spring进行开发
-
对Spring Boot有一定的了解
-
Maven、HTML、Thymeleaf
- 理解邮件发送的基本知识
实践
注:基础配置->文本邮件->HTML邮件->附件邮件->图片邮件->邮件模板->异常处理
-
引入相关Jar包
-
配置邮箱参数
-
封装SimpleMailMessage
- JavaMailSender进行发送
发送文本邮件
/**
* 发送简单文本文件
* @param to 向谁发送
* @param subject 邮件主题
* @param content 邮件内容
*/public void sendSimpleMail(String to ,String subject,String content){
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(content);
message.setFrom(emailConfig.getFrom()); //发送邮件
mailSender.send(message);
}
@Testpublic void sendSimpleMail() throws Exception {
mailService.sendSimpleMail("1341933031@qq.com","文本邮件","这是一封文本邮件");
}
发送HTML邮件
/**
* 发送HTML邮件
* @param to 向谁发送
* @param subject 邮件主题
* @param content 邮件内容
* @throws MessagingException
*/public void sendHtmlMail(String to,String subject,String content) {
log.info("发送HTML邮件开始:{},{},{}",to,subject,content);
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = null; try {
helper = new MimeMessageHelper(message,true);
helper.setFrom(emailConfig.getFrom());
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);
mailSender.send(message);
log.info("发送HTML邮件成功!");
} catch (MessagingException e) {
log.error("发送HTML邮件失败:",e);
}
}
@Testpublic void sendHtmlMail() throws Exception {
String content = "<html>\n"+ "<body\n>"+ "<h3>hello world , 这是一封html邮件!</h3>\n"+ "</body>\n"+ "</html>\n";
mailService.sendHtmlMail(to,"html邮件",content);
}
发送附件邮件
/**
* 发送附件邮件
* @param to 向谁发送
* @param subject 发送主题
* @param content 内容
* @param filePath 文件路径 多文件转数组参数
* @throws MessagingException
*/public void sendAttachmentsMail(String to,String subject,String content,String filePath)
throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(emailConfig.getFrom());
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = file.getFilename();
helper.addAttachment(fileName,file);
mailSender.send(message);
}
@Testpublic void sendAttachmentsMail() throws Exception {
String filePath = "D:\\C语言\\ch7-1 让指针不再困扰你.docx";
mailService.sendAttachmentsMail(to,"附件邮件","这是一封附件邮件",filePath);
}
带图片的邮件
/**
* 带图片的邮件
* @param to 向谁发送
* @param subject 主题
* @param content 内容
* @param rscPath 图片地址
* @param rscId 图片id
* @throws MessagingException
*/public void sendInlinResourceMail(String to,String subject,String content,
String rscPath,String rscId) throws MessagingException {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(emailConfig.getFrom());
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);
FileSystemResource res = new FileSystemResource(new File(rscPath));
helper.addInline(rscId,res);// helper.addInline(rscId,res);多张图片
mailSender.send(message);
}
@Testpublic void sendInlinResourceMail() throws Exception {
String imgPath = "C:\\Users\\Administrator\\Pictures\\公司\\user.png";
String rscId = "new001";
String content = "<html><body>这是有图片的邮件:<img src=\'cid:"+rscId+ "\'></img></body></html>";
mailService.sendInlinResourceMail(to,"图片邮件",content,imgPath,rscId);
}
邮件模板
<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>
<meta charset="UTF-8"/>
<title>邮件模板</title></head><body>
你好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持。<br/>
<a href="#" th:href="@{https://github.com/UncleCatMySelf/{id}(id=${id})}">激活账户</a></body></html>
@Test
public void testTemplateMailTest() throws MessagingException {
Context context = new Context();
context.setVariable("id","01");
String emailContent = templateEngine.process("emailTemplate",context);
mailService.sendHtmlMail(to,"模板邮件",emailContent);
}
邮件系统
-
独立微服务
-
异常处理
-
定时重试邮件
- 异步发送
异常
-
421 HL:ICC 该IP同时并发连接数过大
-
451 Requested mail action not taken:too much fail ... 登录失败次数过多,被临时禁止登录
- 553 authentication is required 认证失败
效果
Github地址:
https://github.com/UncleCatMySelf/emailUtil
项目名称:
UncleCatMySelf/emailUtil