• SpringBoot整合邮件发送


    本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码。希望大家都能够从中有所收获,也请大家多多支持。
    专栏地址:SpringBoot专栏
    本文涉及的代码都已放在gitee上:gitee地址
    如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。
    专栏汇总:专栏汇总

    邮件

    ​ springboot整合第三方技术第三部分我们来说说邮件系统,发邮件是java程序的基本操作,springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作,再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化的多码?其实不多,差别不大,只是还个格式而已。

    ​ 学习邮件发送之前先了解3个概念,这些概念规范了邮件操作过程中的标准。

    • SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议
    • POP3(Post Office Protocol - Version 3):用于接收电子邮件的标准协议
    • IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议

    ​ 简单说就是SMPT是发邮件的标准,POP3是收邮件的标准,IMAP是对POP3的升级。我们制作程序中操作邮件,通常是发邮件,所以SMTP是使用的重点,收邮件大部分都是通过邮件客户端完成,所以开发收邮件的代码极少。除非你要读取邮件内容,然后解析,做邮件功能的统一处理。例如HR的邮箱收到求职者的简历,可以读取后统一处理。但是为什么不制作独立的投递简历的系统呢?所以说,好奇怪的需求,因为要想收邮件就要规范发邮件的人的书写格式,这个未免有点强人所难,并且极易收到外部攻击,你不可能使用白名单来收邮件。如果能使用白名单来收邮件然后解析邮件,还不如开发个系统给白名单中的人专用呢,更安全,总之就是鸡肋了。下面就开始学习springboot如何整合javamail发送邮件。

    发送简单邮件

    步骤①:导入springboot整合javamail的starter

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    步骤②:配置邮箱的登录信息

    spring:
      mail:
        host: smtp.126.com
        username: test@126.com
        password: test
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ​ java程序仅用于发送邮件,邮件的功能还是邮件供应商提供的,所以这里是用别人的邮件服务,要配置对应信息。

    ​ host配置的是提供邮件服务的主机协议,当前程序仅用于发送邮件,因此配置的是smtp的协议。

    ​ password并不是邮箱账号的登录密码,是邮件供应商提供的一个加密后的密码,也是为了保障系统安全性。不然外部人员通过地址访问下载了配置文件,直接获取到了邮件密码就会有极大的安全隐患。有关该密码的获取每个邮件供应商提供的方式都不一样,此处略过。可以到邮件供应商的设置页面找POP3或IMAP这些关键词找到对应的获取位置。qq邮箱的服务开启如下,仅供参考:

    在这里插入图片描述

    在这里插入图片描述

    步骤③:使用JavaMailSender接口发送邮件

    @Service
    public class SendMailServiceImpl implements SendMailService {
        @Autowired
        private JavaMailSender javaMailSender;
    
        //发送人
        private String from = "test@qq.com";
        //接收人
        private String to = "test@126.com";
        //标题
        private String subject = "测试邮件";
        //正文
        private String context = "测试邮件正文内容";
    
        @Override
        public void sendMail() {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from+"(小甜甜)");
            message.setTo(to);
            message.setSubject(subject);
            message.setText(context);
            javaMailSender.send(message);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    ​ 将发送邮件的必要信息(发件人、收件人、标题、正文)封装到SimpleMailMessage对象中,可以根据规则设置发送人昵称等。

    发送多组件邮件(附件、复杂正文)

    ​ 发送简单邮件仅需要提供对应的4个基本信息就可以了,如果想发送复杂的邮件,需要更换邮件对象。使用MimeMessage可以发送特殊的邮件。

    发送网页正文邮件

    @Service
    public class SendMailServiceImpl2 implements SendMailService {
        @Autowired
        private JavaMailSender javaMailSender;
    
        //发送人
        private String from = "test@qq.com";
        //接收人
        private String to = "test@126.com";
        //标题
        private String subject = "测试邮件";
        //正文
        private String context = "<img src='ABC.JPG'/><a href='https://www.itcast.cn'>点开有惊喜</a>";
    
        public void sendMail() {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message);
                helper.setFrom(to+"(小甜甜)");
                helper.setTo(from);
                helper.setSubject(subject);
                helper.setText(context,true);		//此处设置正文支持html解析
    
                javaMailSender.send(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    发送带有附件的邮件

    package com.example.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMailMessage;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Service;
    
    import javax.mail.internet.MimeMessage;
    import java.io.File;
    
    @Service
    public class SendMailSercive {
        @Autowired
        private JavaMailSender javaMailSender;
    
        //发送人
        private String to = "xmg665@126.com";
    
        //接收人
        private String from = "aaaaaa@qq.com";
    //    private String to = "bbbbbbb@qq.com";
    
        //标题
        private String subject = "测试邮件";
        //正文
        private String context = "测试邮件正文内容";
        //正文
        private String context2 = "<img src='https://img1.baidu.com/it/u=2476734823,214005944&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500' /><a href='https://www.baidu.com'>测试富文本</a>";
    
        public void sendMail() {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from+"(小甜甜)");
            message.setTo(to);
            message.setSubject(subject);
            message.setText(context);
            javaMailSender.send(message);
        }
    
        public void sendMail2() {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message);
                helper.setFrom(from+"(小甜甜)");
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(context2,true);
    
                javaMailSender.send(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public void sendMail3() {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
    //            允许添加附件
                MimeMessageHelper helper = new MimeMessageHelper(message,true);
                helper.setFrom(from+"(小甜甜)");
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(context2,true);
    
                //添加附件
    //            File f1 = new File("resources\\application.yml");
                File f2 = new File("E:\\cgw\\gitee\\spring-boot-tutorial\\springboot_0021_springboot_email\\src\\main\\resources\\ABC.jpg");
    
    //            helper.addAttachment(f1.getName(),f1);
                helper.addAttachment("test.png",f2);
    
                javaMailSender.send(message);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    总结

    1. springboot整合javamail其实就是简化了发送邮件的客户端对象JavaMailSender的初始化过程,通过配置的形式加载信息简化开发过程
  • 相关阅读:
    谷粒商城错误总结
    SpringBoot -集成Druid
    《500强高管谈VE》-新领域的VE及其成功的条件
    使用Jenkins自动化部署项目
    Flink SQL管理平台flink-streaming-platform-web安装搭建
    SpringCloud(二) 用Eureka做服务注册中心认证
    vite 打包部署出现的问题
    姓名缘分查询易语言代码
    智能指针作为模板参数并校验是否子类
    基于Springboot+mybatis+mysql+html教育培训中心教学系统
  • 原文地址:https://blog.csdn.net/Learning_xzj/article/details/125511069