基于SpringBoot集成所有邮件发送功能

基于SpringBoot集成所有邮件发送功能
邮件使用场景

  • 注册验证

  • 网站营销

  • 安全的最后一道防线(找回账户密码)

  • 提醒、监控告警

  • 触发机制

基于SpringBoot集成所有邮件发送功能
邮件发送原理

  • 邮件传输协议:SMTP协议和POP3协议

  • 内容不断发展:IMAP协议和Mime协议

邮件发送历史

  • 1969年10月,世界上的第一封电子邮件

  • 1987年9月14日中国的第一封电子邮件

  • 30年发展历史

  • Java发送邮件

  • Spring发送邮件

基于SpringBoot集成所有邮件发送功能
Spring Boot介绍

  • 约定大于配置

  • 简单快速开发

  • 强大的生态链

  • Spring Boot和发送邮件

前置知识

  • 会使用Spring进行开发

  • 对Spring Boot有一定的了解

  • Maven、HTML、Thymeleaf

  • 理解邮件发送的基本知识

实践
注:基础配置->文本邮件->HTML邮件->附件邮件->图片邮件->邮件模板->异常处理

  • 引入相关Jar包

  • 配置邮箱参数

  • 封装SimpleMailMessage

  • JavaMailSender进行发送

基于SpringBoot集成所有邮件发送功能
发送文本邮件


/**
 * 发送简单文本文件
 * @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","文本邮件","这是一封文本邮件");
}

基于SpringBoot集成所有邮件发送功能
发送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);
}

基于SpringBoot集成所有邮件发送功能
发送附件邮件


/**
 * 发送附件邮件
 * @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);
}

基于SpringBoot集成所有邮件发送功能
带图片的邮件


/**
 * 带图片的邮件
 * @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);
}

基于SpringBoot集成所有邮件发送功能
邮件模板


<!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);

    }

基于SpringBoot集成所有邮件发送功能
邮件系统

  • 独立微服务

  • 异常处理

  • 定时重试邮件

  • 异步发送

异常

  • 421 HL:ICC 该IP同时并发连接数过大

  • 451 Requested mail action not taken:too much fail ... 登录失败次数过多,被临时禁止登录

  • 553 authentication is required 认证失败

效果
基于SpringBoot集成所有邮件发送功能

Github地址:

https://github.com/UncleCatMySelf/emailUtil

项目名称:

UncleCatMySelf/emailUtil

上一篇:数据结构+算法--环形链表的创建和遍历 与 约瑟夫问题的解决


下一篇:springboot邮件任务