原理
邮件使用场景
- 注册验证
- 网站营销
- 安全的最后一道防线(找回账户密码)
- 提醒、监控告警
- 触发机制
邮件发送原理
- 邮件传输协议: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);
}
@Test
public void sendSimpleMail() throws Exception {
mailService.sendSimpleMail("[email protected]","文本邮件","这是一封文本邮件");
}
发送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);
}
}
@Test
public void sendHtmlMail() throws Exception {
String content = "\n"+
""+
"hello world , 这是一封html邮件!
\n"+
"\n"+
"\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);
}
@Test
public 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);
}
@Test
public void sendInlinResourceMail() throws Exception {
String imgPath = "C:\\Users\\Administrator\\Pictures\\公司\\user.png";
String rscId = "new001";
String content = "这是有图片的邮件:";
mailService.sendInlinResourceMail(to,"图片邮件",content,imgPath,rscId);
}
邮件模板
邮件模板
你好,感谢您的注册,这是一封验证邮件,请点击下面的链接完成注册,感谢您的支持。
激活账户
@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 认证失败
效果
如果本文对你有所帮助,欢迎关注个人技术公众号,或点赞,谢谢。