SpringBoot 集成邮件服务以及邮件发送的几种方式

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SpringBoot 集成邮件服务以及邮件发送的几种方式

 点击上方 **好好学java **,选择 **星标 **公众号


重磅资讯、干货,第一时间送达
今日推荐:为什么程序员都不喜欢使用switch,而是大量的 if……else if ?个人原创+1博客:点击前往,查看更多

目录:

  • 一、SMTP协议简介- 二、开启SMTP服务并获取授权码- 三、依赖导入与配置说明- 四、邮件发送-
    • 1.简单邮件发送- 2. 带附件内容和正文带图片的邮件发送- 3. thymeleaf模板作为邮件发送
      五、总结

    一、SMTP协议简介

        SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。

     简单来说:我们使用的这些邮件发送功能,他们之间都有一个专门的电子邮件的服务器,类似于邮局,你将邮件发给邮局,邮局又会根据你的邮寄地址发送给相应的邮局,然后接收方去邮局取邮件。而邮件服务器呢,就是互联网之间的一个邮局,不同的网络之间也能实现电子邮件的发送。

     Spring框架在java邮件服务的基础上进行了封装,SpringBoot在Spring的基础上对邮件服务进一步的封装,让SpringBoot发送邮件更为便利,灵活。

    二、开启SMTP服务并获取授权码

     这里我们以QQ邮箱为例,要想在SpringBoot发送QQ邮件必须先打开QQ邮箱的SMTP功能,默认是关闭的,具体操作如下。进入邮箱→设置→账户,然后找到下面这个: 

     将第一个开启,这里我已经开启了,就不用再开启了,至于那个POP3协议,这是一种从邮件服务器上读取邮件的协议,通过POP3协议,收信人不需要参与到与邮件服务器之间的邮件读取过程,简化了用户操作. 收信人可以“离线”地进行邮件处理,很方便地接收,阅读邮件。

     然后我们开启之后还需要获取一个授权码,这个授权码我们后面编写邮件配置需要用到。获取授权码可能需要验证身份什么的。将授权码保存下来。 

    附上我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,目前,已经拿到了大厂offer,拿去不谢!

    下载方式

    1. 首先扫描下方二维码

    2. 后台回复「Java面试」即可获取

    三、依赖导入与配置说明

    依赖导入

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

     为了方便测试我们也需要将starter-web的依赖导入进来。

    配置文件

    
    spring:
      mail:
        host: smtp.qq.com
        username: qzstudynote@qq.com
        password: zxcvbnmkj
        properties:
          mail:
            smtp:
              socketFactory:
                class: javax.net.ssl.SSLSocketFactory
    ##         ssl:
    ##           enable :true
        default-encoding: utf-8
    

    配置说明

    • host就是你的邮件服务器地址,- username就是你的邮箱账号,带上后缀- password就是你刚刚复制的授权码,我这里是乱写的;- default-encoding 设置邮件的编码为utf-8;- properties:额外的配置,这里我写了两个,只用其中一个就行了,开启ssl加密,保证安全连接。

    四、邮件发送

    1

    1.简单邮件发送

     编写controller,或者是直接在测试模块添加测试就行

    
    @RestController
    public class MailController {
        @Autowired
        JavaMailSenderImpl javaMailSender;
        @RequestMapping("/mail")
        public String sendMail(){
            SimpleMailMessage message = new SimpleMailMessage();
            //邮件设置
            message.setSubject("邮件主题");
            message.setText("邮件内容");
            message.setTo("xxxxxxx@139.com","111111111@qq.com");
            message.setFrom("qzstudynote@qq.com");
            javaMailSender.send(message);
            return "简单邮件发送成功!"
        }
    }
    

    代码说明JavaMailSenderImpl就是一个SpringBoot中用来发送邮件的一个实现类,我们需要将它注入到bean中,以供使用。它里面有一些方法,这里只展示了简单的几个,其他的也很简单,比如说发送日期,抄送人等等。接受者可以设置多个,如上。

    1

    1. 带附件内容和正文带图片的邮件发送
    
    @RequestMapping("/mineMail")
    public String sendMineMail() throws MessagingException {
         //1、创建一个复杂的邮件
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            //邮件主题
            helper.setSubject("这是一个邮件啊");
            //文本中添加图片
            helper.addInline("image1",new FileSystemResource("D:\\images\\spring\\1.jpg"));
            //邮件内容
            helper.setText("全栈学习笔记<a href='https://www.cnblogs.com/swzx-1213/'>百度一下</a>    <img src='cid:image1'></img>",true);
            helper.setTo("xxxxx@139.com");
            helper.setFrom("qzstudynote@qq.com");
            //附件添加图片
            helper.addAttachment("1.jpg",new File("D:\\images\\spring\\1.jpg"));
            //附件添加word文档
            helper.addAttachment("哈哈哈.docx",new File("D:\\images\\spring\\哈哈哈.docx"));
    
            javaMailSender.send(mimeMessage);
           return "复杂邮件发送!";
    }
    
    

    代码说明

    • 创建一个MimeMessage 邮件,但是我们也需要创建一个工具类MimeMessageHelper,相当于代理类吧,邮件的属性配置就由这个工具类来实现。- addInline(),第一个参数是一个contentId,String类型的,相当于是一个key,第二个参数是一个Resource对象,资源对象,这里我们传了一个本地的图片就用的FileSystemResource对象。当然这里是说的我们用的这个addInline方法的参数是这样,还有其他的参数类型,所谓重载。- **setText()**,这里用到的第一个参数就是文本字符串,第二个就是是否解析文本中的html语法。- addAttachment() 这个方法是用来添加附件的,附件和我们之前添加的图片不一样,附件作为一种未下载的文件,而资源文件则是直接显示到正文中。利用我自己的邮箱进行测试的截图:-

    3

    1. thymeleaf模板作为邮件发送

     项目中需要引入thymeleaf依赖,并且要在新建的html文件中加入:xmlns:th=”http://www.thymeleaf.org" ,不会thymeleaf的请移步之前的文章。

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

     这里在templates下面创建了一个email的html5文件。

    
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    
    <p th:text="${name}"></p>
    <a th:text="这是一个链接" th:href="${link}"></a>
    <img th:src="${image1}">
    </body>
    </html>
    

     controller中再添加一个方法。

    
    @RequestMapping("/thyMail")
        public String sendThymeleafMail() throws MessagingException {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
            messageHelper.setSubject("这是一个thymeleaf模板邮件");
            messageHelper.setTo("xxxxxxxx@139.com");
            messageHelper.setFrom("qzstudynote@qq.com");
            Context context = new Context();
            context.setVariable("name","这是一个新建的thymeleaf模板");
            context.setVariable("link","https://www.cnblogs.com/swzx-1213/");
            context.setVariable("image1","https://s1.ax1x.com/2020/04/14/JShDYt.th.jpg");
            String value = templateEngine.process("email.html",context);
            messageHelper.setText(value,true);
            javaMailSender.send(mimeMessage);
            return "模板邮件发送成功";
        }
    

    代码说明:

    • Context 属于org.thymeleaf.context这个包。- context.setVariable(),第一个参数是String,第二个是Object类型。第一个参数就对应thymeleaf模板上面相同名字的参数。- **templateEngine.process()**将指定路径的html文件转换成String类型返回。
       测试:

     

        

    五、总结

     本文讲了基础的邮件发送原理,SMTP协议以及提到的POP3协议的概要内容。然后一起引入依赖,添加项目属性配置,最后讲解了三大类发送邮件的方式。源码获取后台回复【SpringBoot】。

    最后,再附上我历时三个月总结的 Java 面试 + Java 后端技术学习指南,这是本人这几年及春招的总结,目前,已经拿到了大厂offer,拿去不谢!

    下载方式

    1. 首先扫描下方二维码

    2. 后台回复「Java面试」即可获取

    原文地址:https://sihai.blog.csdn.net/article/details/109465506

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SpringBoot 集成邮件服务以及邮件发送的几种方式


 上一篇
Linux最常用命令——简单易学,但能解决95%以上的问题 Linux最常用命令——简单易学,但能解决95%以上的问题
 点击上方 **好好学java **,选择 **星标 **公众号 重磅资讯、干货,第一时间送达 今日推荐:为什么程序员都不喜欢使用switch,而是大量的 if……else if ?个人原创+1博客:点击前往,查看更多 原文:https
2021-04-04
下一篇 
面试造飞机系列——volatile面试的连环追击,你还好吗? 面试造飞机系列——volatile面试的连环追击,你还好吗?
 点击上方 **好好学java **,选择 **星标 **公众号 重磅资讯、干货,第一时间送达 今日推荐:为什么程序员都不喜欢使用switch,而是大量的 if……else if ?个人原创+1博客:点击前往,查看更多 本文脑图在深入
2021-04-04