美文网首页springboot
SpringBoot 邮件服务

SpringBoot 邮件服务

作者: 月弦 | 来源:发表于2019-08-19 11:08 被阅读0次

    前言

    发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用 JavaMail 相关 api 来写发送邮件的相关代码,后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的过程,在之后 Spring Boot 对此进行了封装就有了现在的 spring-boot-starter-mail ,本章文章的介绍主要来自于此包。

    1、pxm.xml文件

    需要引入spring-boot-starter-mail依赖。

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.huzh</groupId>
        <artifactId>springboot-mail</artifactId>
        <version>1.0-SNAPSHOT</version>
        <name>springboot-mail</name>
        <description>springboot-mail</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <!--thymeleaf-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    
            <!--web-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--mail-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    

    2、application.yml配置

    • 配置邮箱的信息,使用QQ邮箱,密码这里需要在邮箱-->设置-->账户里面开启POP3/SMTP服务。
    • main中的信息是发送者和接受者。
    spring:
      mail:
        ##邮箱服务器地址
        ##QQ smtp.qq.com
        ##sina smtp.sina.cn
        ##aliyun smtp.aliyun.com
        ##163 smtp.163.com
        host: smtp.qq.com
        username: *******@qq.com
        password: ******
        default-encoding: utf-8
    server:
      port: 8080
    main:
      formMail:
        sender: *******@qq.com
        receiver: ******@qq.com
    

    3、完整controller类

    这里包含了发送文本邮件、发送html邮件、发送附件邮件、发送图片邮件和发送html模板邮件。其中发送模板邮件需要HTML代码。这里主要用到JavaMailSender类作为邮件发送和TemplateEngine类作为模板解析。

    @RestController
    public class MailController {
    
        private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Value("${main.formMail.sender}")
        private String sender;
        @Value("${main.formMail.receiver}")
        private String receiver;
    
        @Autowired
        private JavaMailSender javaMailSender;
    
        @Autowired
        private TemplateEngine templateEngine;
    
        /**
         * @return java.lang.String
         * @Description 发送文本邮件
         * @date 2019/8/14 9:44
         * @author huzh
         **/
        @RequestMapping("/sendMail")
        public String sendMail() {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(sender);
            message.setTo(receiver);
            //邮件主题
            message.setSubject("文本邮件测试");
            //邮件内容
            message.setText("hello mail");
    
            try {
                javaMailSender.send(message);
                logger.info("简单邮件已经发送。");
            } catch (MailException e) {
                logger.error("发送简单邮件时发生异常!", e);
            }
            return "success";
        }
    
        /**
         * @return java.lang.String
         * @Description 发送html邮件
         * @date 2019/8/14 11:52
         * @author huzh
         **/
        @RequestMapping("/sendHtmlMail")
        public String sendHtmlMail() {
            String content = "<html>\n" +
                    "<body>\n" +
                    "    <h3>hello world ! 这是一封Html邮件!</h3>\n" +
                    "</body>\n" +
                    "</html>";
            MimeMessage message = javaMailSender.createMimeMessage();
            try {
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);
                helper.setTo(receiver);
                helper.setSubject("html邮件测试");
                helper.setText(content, true);
    
                javaMailSender.send(message);
                logger.info("html邮件发送成功");
            } catch (MessagingException e) {
                logger.error("发送html邮件时发生异常!", e);
            }
            return "success";
        }
    
        /**
         * @return java.lang.String
         * @Description 发送html模板邮件
         * @date 2019/8/14 14:51
         * @author huzh
         **/
        @RequestMapping("/sendHtmlTemplateMail")
        public String sendHtmlTemplateMail() {
            //创建邮件正文
            Context context = new Context();
            context.setVariable("id", "006");
            String content = templateEngine.process("emailTemplate", context);
    
            MimeMessage message = javaMailSender.createMimeMessage();
            try {
                //true表示需要创建一个multipart message
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);
                helper.setTo(receiver);
                helper.setSubject("html模板邮件测试");
                helper.setText(content, true);
    
                javaMailSender.send(message);
                logger.info("html邮件发送成功");
            } catch (MessagingException e) {
                logger.error("发送html邮件时发生异常!", e);
            }
            return "success";
        }
    
        /**
         * @return java.lang.String
         * @Description 发送附件邮件
         * @date 2019/8/14 12:31
         * @author huzh
         **/
        @RequestMapping("/sendFilesMail")
        public String sendFilesMail() {
            String filePath = "C:\\Users\\Administrator\\Downloads\\11.doc";
            MimeMessage message = javaMailSender.createMimeMessage();
    
            try {
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);
                helper.setTo(receiver);
                helper.setSubject("附件邮件测试");
                helper.setText("附带附件", true);
    
                FileSystemResource file = new FileSystemResource(new File(filePath));
                String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
                helper.addAttachment(fileName, file);
    
                javaMailSender.send(message);
                logger.info("带附件的邮件已经发送。");
            } catch (MessagingException e) {
                logger.error("发送带附件的邮件时发生异常!", e);
            }
    
            return "success";
        }
    
        /**
         * @return java.lang.String
         * @Description 发送图片邮件
         * @date 2019/8/14 12:33
         * @author huzh
         **/
        @RequestMapping("/sendImgMail")
        public String sendImgMail() {
            String Id = "test_mail";
            String content = "<html><body>这是有图片的邮件:<img src=\'cid:" + Id + "\'></body></html>";
            String imgPath = "C:\\Users\\Administrator\\Downloads\\222.jpg";
    
            MimeMessage message = javaMailSender.createMimeMessage();
    
            try {
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(sender);
                helper.setTo(receiver);
                helper.setSubject("图片邮件测试");
                helper.setText(content, true);
    
                FileSystemResource res = new FileSystemResource(new File(imgPath));
                helper.addInline(Id, res);
    
                javaMailSender.send(message);
                logger.info("嵌入静态资源的邮件已经发送。");
            } catch (MessagingException e) {
                logger.error("发送嵌入静态资源的邮件时发生异常!", e);
            }
            return "success";
        }
    }
    

    4、模板HTML

    创建模板emailTemplate.html文件

    <!DOCTYPE html>
    <html lang="zh" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    您好,这是验证邮件,请点击下面的链接完成验证,<br/>
    <a href="#" th:href="@{ http://www.ityouknow.com/neo/{id}(id=${id}) }">激活账号</a>
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:SpringBoot 邮件服务

        本文链接:https://www.haomeiwen.com/subject/fxnjsctx.html