• SpringBoot系列——mail


      前言

      邮件是许多项目里都需要用到的功能,之前一直都是用JavaMail来发,现在Spring框架为使用JavaMailSender接口发送电子邮件提供了一个简单的抽象,Spring Boot为它提供了自动配置以及启动模块。springboot参考手册介绍:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-email

      作为发送方,首先需要开启POP3/SMTP服务,登录邮箱后前往设置进行开启,开启后取得授权码。

      POP3 :
      POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
      

      SMTP:
      SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。是一组用于从源地址到目的地址传输邮件的规范,通过来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

      代码编写

      maven引包,其中,邮件模板需要用到thymeleaf

            <!-- springboot mail -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>
            <!-- thymeleaf模板 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <!-- springboot web(MVC)-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- springboot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>

      appliaction.propertise配置文件

    #设置服务端口
    server.port=10010
    
    # Email (MailProperties)
    spring.mail.default-encoding=UTF-8
    spring.mail.host=smtp.qq.com
    spring.mail.username=huanzi.qch@qq.com #发送方邮件名 
    spring.mail.password= #授权码
    spring.mail.properties.mail.smtp.auth=true
    spring
    .mail.properties.mail.smtp.starttls.enable=true
    spring
    .mail.properties.mail.smtp.starttls.required=true

      SpringBootMailServiceImpl.java

    @Service
    class SpringBootMailServiceImpl implements SpringBootMailService {
    
        @Autowired
        private JavaMailSender mailSender;
    
        /**
         * 发送方
         */
        @Value("${spring.mail.username}")
        private String from;
    
        /**
         * 发送简单邮件
         *
         * @param to      接收方
         * @param subject 邮件主题
         * @param text    邮件内容
         */
        @Override
        public void sendSimpleMail(String to, String subject, String text) {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(to);
            message.setSubject(subject);
            message.setText(text);
    
            mailSender.send(message);
        }
    
        /**
         * 发送HTML格式的邮件
         *
         * @param to      接收方
         * @param subject 邮件主题
         * @param content HTML格式的邮件内容
         * @throws MessagingException
         */
        @Override
        public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
            MimeMessage message = mailSender.createMimeMessage();
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
    
            mailSender.send(message);
        }
    
        /**
         * 发送HTML格式的邮件,并可以添加附件
         * @param to      接收方
         * @param subject 邮件主题
         * @param content HTML格式的邮件内容
         * @param files   附件
         * @throws MessagingException
         */
        @Override
        public void sendAttachmentsMail(String to, String subject, String content, List<File> files) throws MessagingException {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            //添加附件
            for(File file : files){
                helper.addAttachment(file.getName(), new FileSystemResource(file));
            }
    
            mailSender.send(message);
        }
    }

      测试controller

        @Autowired
        private SpringBootMailService springBootMailService;
    
        @Autowired
        private TemplateEngine templateEngine;
    
        @GetMapping("/index")
        public String index() throws MessagingException {
            //简单邮件
            springBootMailService.sendSimpleMail("1726639183@qq.com","Simple Mail","第一封简单邮件");
    
            //HTML格式邮件
            Context context = new Context();
            context.setVariable("username","我的小号");
            springBootMailService.sendHtmlMail("1726639183@qq.com","HTML Mail",templateEngine.process("mail/mail",context));
    
            //HTML格式邮件,带附件
            Context context2 = new Context();
            context2.setVariable("username","我的小号(带附件)");
            ArrayList<File> files = new ArrayList<>();
            files.add(new File("C:\Users\Administrator\Desktop\上传测试.txt"));
            files.add(new File("C:\Users\Administrator\Desktop\上传测试2.txt"));
            springBootMailService.sendAttachmentsMail("1726639183@qq.com","Attachments Mail",templateEngine.process("mail/attachment",context2),files);
    
            return "hello springboot!";
        }

      两个html模板,路径:myspringbootsrcmain esources emplatesmail

      mail.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Mail Templates</title>
    </head>
    <body>
        <h3><span th:text="${username}"></span>,你好!</h3>
        <p style="color: red;">这是一封HTML格式的邮件。</p>
    </body>
    </html>

      attachment.html

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Mail Templates Accessory</title>
    </head>
    <body>
        <h3><span th:text="${username}"></span>,你好!</h3>
        <p>这是一封HTML格式的邮件。请收下附件!</p>
    </body>
    </html>

      效果

      Simple Mail

      

      HTML Mail

      Attachments Mail 

      后记

      本文章部分参考:https://www.cnblogs.com/yangtianle/p/8811732.html

      代码开源

      代码已经开源、托管到我的GitHub、码云:

      GitHub:https://github.com/huanzi-qch/springBoot

      码云:https://gitee.com/huanzi-qch/springBoot

  • 相关阅读:
    MySQL之触发器
    MySQL之视图
    MySQL之多表查询(笛卡尔积查询、内连接、外连接(左外连接,右外连接)、union、union all )
    MySQL之子查询
    MySQL之关键字
    mysql之内连接,外连接(左连接,右连接),union,union all的区别
    mysql之魔鬼训练营
    MySQL之innodb和myisam的区别
    springmvc+spring+mybatis 项目配置
    Css3 伪元素
  • 原文地址:https://www.cnblogs.com/huanzi-qch/p/9957987.html
Copyright © 2020-2023  润新知