• SpringBoot邮件推送功能


    鞠躬,道歉

    抱歉,迟到了近一年的更新,这一年挺忙的,发生了很多事情,就厚脸皮拖更了,抱歉。
    现在状态回来了,打算分享下近期学到的东西,这一年期间学到的东西可能会随意更新,其实也就是玩了下C# + unity3D,本来打算做个长期项目,但是申报比赛连预选都没有过,预选都是垫底的。项目展示视频见这个。还有就是和学院老师做了智慧博物馆的项目,文物的建模与AR以及互动小游戏都有参与。

    but,从去年10月份开始又重新开始学Java和SSM的一些东西,上面说的以后应该没有机会玩了,AR倒是有时间可以分享给大家,但是项目那些演示视频暂时不方便公开。教程的话网上蛮多的,我用的是Vuforia这个,和unity3D契合度蛮高的。想玩的朋友可以去弄弄,挺简单的。

    之前一个unity3D项目的展示视频

    正题

    挺长时间了,一直在学Spring、SpringMVC、SpringBoot、Mybatis这些,但是感觉学了蛮久但不精通,也就不敢乱分享高深的。现在在做一个系统,需要发送邮件给用户,网上找了一圈相关博客,参考大佬做了自己的一个记录。也借机回归一周一更的状态,不写点东西对不起大家,嘿嘿。

    在我们平时,时常需要利用邮箱注册各种各样的账号或者接收一些通知信息。这使得一个功能完善的系统必然会有一个邮件发送功能。下面就是我近期学习的一个邮件发送系统demo。

    介绍

    Spring项目中,邮件发送使用Spring提供的org.springframework.mail.javamail.JavaMailSender,它提供了一些简单易用的方法,可以发送简单邮件带附件的邮件HTML格式的邮件、以及依靠固定模板的邮件

    引入pom.xml依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    

    配置(记得重新配置发件邮箱及密码)

    请修改username及password为你的发件邮箱,各平台发件密码规格不一样,切需要卡通smtp功能,请看各平台要求。
    之前用QQ邮箱要求配置后,测试好多次都无法发送,建议使用其他邮箱,笔者用163邮箱,但各位注意163邮箱默认在邮件后附带推广,记得在设置中关闭,之前测试的时候很坑。

    server:
      port: 8080
    
    spring:
      mail:
        host: smtp.163.com
        username: 123456789@163.com
        password: 123456789
        properties:
          mail:
            smtp:
              auth: true
              starttls:
                enable: true
                required: true
    

    发送简单邮件代码展示

    // 简单邮件
    @RequestMapping("sendSimpleEmail")
    public String sendSimpleEmail() {
        try {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from);
            message.setTo(toEmail); // 接收地址,可传入数组进行群发
            message.setSubject("新年好"); // 标题
            message.setText("新年快乐,完事大吉
     新年新气象"); // 内容
            javaMailSender.send(message);
            return "发送成功";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }
    

    启动项目,发送 http://localhost:8080/email/sendSimpleEmail 即可发送邮件
    结果如下:

    完整示例(记得更换目标邮箱)

    请看以下代码,或GitHub地址clone项目查看,有完整注释。

    package com.mxwbq.demo.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.thymeleaf.TemplateEngine;
    import org.thymeleaf.context.Context;
    import javax.mail.internet.MimeMessage;
    import java.io.File;
    
    /**
     * Created by mxwbq on 2019/3/29.
     */
    @RestController
    @RequestMapping("/email")
    public class EmailController {
    
        @Autowired
        private JavaMailSender javaMailSender;
    
        @Value("${spring.mail.username}")
        private String from;
    
        // 目标邮箱地址,记得更换
        private String toEmail = "123456789@163.com";
    
        @Autowired
        private TemplateEngine templateEngine;
    
        // 简单邮件
        @RequestMapping("sendSimpleEmail")
        public String sendSimpleEmail() {
            try {
                SimpleMailMessage message = new SimpleMailMessage();
                message.setFrom(from);
                message.setTo(toEmail); // 接收地址,可传入数组进行群发,下同
                message.setSubject("新年好"); // 标题
                message.setText("新年快乐,完事大吉
     新年新气象"); // 内容
                javaMailSender.send(message);
                return "发送成功";
            } catch (Exception e) {
                e.printStackTrace();
                return e.getMessage();
            }
        }
    
        // 发送Html格式邮件
        @RequestMapping("sendHtmlEmail")
        public String sendHtmlEmail() {
            MimeMessage message = null;
            try {
                message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(toEmail); // 接收地址
                helper.setSubject("HTML格式的邮件"); // 标题
                // 带HTML格式的内容
                StringBuffer sb = new StringBuffer(
                        "<h1><p style='color:#42b983'>使用Spring Boot发送HTML格式邮件</p></h1>" +
                        "<p>这里是正文:</p>" +
                        "<p>这里是听雨轩地址:www.nucode.cn</p>");
                helper.setText(sb.toString(), true);  // 第二个参数 true 代表规定邮件格式为HTML
                javaMailSender.send(message);
                return "发送成功";
            } catch (Exception e) {
                e.printStackTrace();
                return e.getMessage();
            }
        }
    
        // 发送邮件携带附件
        @RequestMapping("sendAttachmentsMail")
        public String sendAttachmentsMail() {
            MimeMessage message = null;
            try {
                message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(toEmail); // 接收地址
                helper.setSubject("带附件的邮件"); // 标题
                helper.setText("详情参见附件内容!"); // 内容
                // 传入附件
                FileSystemResource file = new FileSystemResource(new File("src\main\resources\static\file\SpringBoot_Email文档.docx"));
                helper.addAttachment("SpringBoot_Email文档.docx", file);
                javaMailSender.send(message);
                return "发送成功";
            } catch (Exception e) {
                e.printStackTrace();
                return e.getMessage();
            }
        }
    
        // 发送附带静态资源的邮件
        @RequestMapping("sendInlineMail")
        public String sendInlineMail() {
            MimeMessage message = null;
            try {
                message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(toEmail); // 接收地址
                helper.setSubject("带静态资源的邮件"); // 标题
                helper.setText("<html><body>生日快乐:<img src='cid:img'/></body></html>", true); // 内容
                // 传入附件
                FileSystemResource file = new FileSystemResource(new File("src/main/resources/static/img/礼物.jpg"));
                helper.addInline("img", file);
                javaMailSender.send(message);
                return "发送成功";
            } catch (Exception e) {
                e.printStackTrace();
                return e.getMessage();
            }
        }
    
        // 发送模板邮件
        @RequestMapping("sendTemplateEmail")
        public String sendTemplateEmail(String registerURL) {
            MimeMessage message = null;
            try {
                message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(from);
                helper.setTo(toEmail); // 接收地址
                helper.setSubject("邮件模板测试"); // 标题
                // 处理邮件模板
                Context context = new Context();
                context.setVariable("registerURL", registerURL);
                String template = templateEngine.process("register", context);
                helper.setText(template, true);
                javaMailSender.send(message);
                return "发送成功";
            } catch (Exception e) {
                e.printStackTrace();
                return e.getMessage();
            }
        }
    }
    
    

    项目GitHub地址

    https://github.com/mxbq/SpringBoot_Study

    说明

    本文参考自MrBird大佬的博客:https://mrbird.cc/Spring-Boot-Email.html,有删改及自我实操问题汇总。

    新的开始,不再颓废。
    谢谢大家


    以上

  • 相关阅读:
    在Winform框架界面中改变并存储界面皮肤样式
    基于主从表数据录入的处理
    使用ew完成多场景下内网代理穿透
    内网渗透中的端口转发——工具很全
    内网渗透常见端口转发方式——lcx netsh rinetd warthworm regeorg msf portfwd sccat metasploit socks4a tunna
    内网渗透代理和转发
    内网渗透代理——reGeorg 利用 webshell 建立一个 socks 代理进行内网穿透,本质上就是在webshell上做了一个代理转发而已
    内网渗透代理——内网的防火墙只配置了入站规则比如只有80端口
    web未授权访问漏洞总结——mongodb、redis、memcache、jboss、vnc、docker、zk、rsync
    web未授权访问漏洞总结——非常全而细致 redis、mongodb、jenkins、zk、es、memcache、hadoop、couchdb、docker
  • 原文地址:https://www.cnblogs.com/mxwbq/p/10625612.html
Copyright © 2020-2023  润新知