springboot邮件发送

一、前言

我们经常会听到各种各样的邮件协议,比如 SMTP、POP3、IMAP ,那么这些协议有什么作用,有什么区别?我们先来讨论一下这个问题。
SMTP 是一个基于 TCP/IP 的应用层协议,江湖地位有点类似于 HTTP,SMTP 服务器默认监听的端口号为25
SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。SMTP 服务器就是用来收邮件。
而 POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则,如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。
最后,可能也有小伙伴们听说过 IMAP 协议,这个协议是对 POP3 协议的扩展,功能更强,作用类似。

二、准备工作

目前国内大部分的邮件服务商都不允许直接使用用户名/密码的方式来在代码中发送邮件,都是要先申请授权码,这里以 QQ 邮箱为例,向大家演示授权码的申请流程:

  1. 首先我们需要先登录 QQ 邮箱网页版,点击上方的设置按钮,再点击账户按钮
    在这里插入图片描述

  2. 在账户选项卡中找到开启POP3/SMTP选项,点击开启
    在这里插入图片描述

  3. 发送短信验证后回得到一个授权码,将授权码复制保存
    在这里插入图片描述

三、项目创建

3.1 简单邮件的发送
  1. 创建springboot项目,导入邮件发送依赖和SpringWeb依赖
    在这里插入图片描述
  2. 在application.properties中配置邮箱基本信息
#配置 SMTP 服务器地址
spring.mail.host=smtp.qq.com
#SMTP 服务器的端口
spring.mail.port=587
#配置邮箱用户名
spring.mail.username=1234567890@qq.com
#配置密码,注意,不是真正的密码,而是刚刚申请到的授权码
spring.mail.password=xxxxxxxxxxxxxxxx
#默认的邮件编码
spring.mail.default-encoding=UTF-8
#配饰 SSL 加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式
spring.mail.properties.mail.debug=true

  1. 发送简单的邮件,在单元测试中写一下代码点击运行即可
	@Autowired
    JavaMailSender mailSender;
	@Test
    public void test01() {
        //构建一封简单邮件
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件主题
        message.setSubject("这是一封测试邮件");
        //邮件正文
        message.setText("这是邮件正文");
        //指定邮件发送者
        message.setFrom(from);
        //收件人
        message.setTo("123456789@qq.com");
        //抄送
        message.setCc("112233445@qq.com");
        //密抄,别人看不到这个收件人
        message.setBcc("222222222@qq.com");
        //邮件发送日期
        message.setSentDate(new Date());
        //发送邮件
        mailSender.send(message);
    }
3.2 复杂邮件的发送(这里使用的是thymeleaf模板)

推荐在 SpringBoot 中使用 Thymeleaf 来构建邮件模板。因为 Thymeleaf 的自动化配置提供了一个TemplateEngine,通过 TemplateEngine 可以方便的将 Thymeleaf 模板渲染为 HTML。

  1. 导入thymeleaf依赖
 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
  1. 创建邮件模板
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
  欢迎 <span th:text="${username}"></span>
  加入 Java开发大家庭,您的入职信息如下:
</div>
<div>
  <table>
    <tr>
      <td>职位名称:</td>
      <td th:text="${position}"></td>
    </tr>

    <tr>
      <td>上级:</td>
      <td th:text="${leader}"></td>
    </tr>
    <tr>
      <td>薪水</td>
      <td th:text="${salary}"></td>
    </tr>
  </table>
  如果入职信息无误,请点击如下链接确认:
  <div><a href="https://qq.yh31.com/tp/mr/202106011140588967.jpg">确认</a></div>
  <img src="https://qq.yh31.com/tp/mr/202105141224077749.jpg" alt="">
</div>
</body>
</html>
  1. 发送邮件
	@Autowired
    JavaMailSender mailSender;
    @Value("${spring.mail.username}")
    String from;
    @Autowired
    TemplateEngine templateEngine;

    @Test
    public void test02() throws MessagingException {
        //创建一个复杂邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //MimeMessageHelper 是一个配置邮件对象的辅助工具
        //如果邮件带附件,注意第二个参数要设置为 true
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        //邮件主题
        helper.setSubject("这是一封来自一个大帅比的邮件");

        Context context = new Context();
        context.setVariable("username", "XXX");
        context.setVariable("position",
                "Java开发工程师");
        context.setVariable("leader", "石XX");
        context.setVariable("salary", "20000");
        String mail = templateEngine.process("email", context);
        //邮件正文
        helper.setText(mail,true);
        //指定邮件发送者
        helper.setFrom(from);
        //收件人
        helper.setTo("11111112220@qq.com");
        抄送
        //helper.setCc("xxxxx@qq.com");
        密抄,别人看不到这个收件人
        //helper.setBcc("xxxxxx@qq.com");
        //邮件发送日期
        helper.setSentDate(new Date());
        //加附件
        //helper.addAttachment("图片",new File("E:\\GZ-2201\\third\\springboot\\SpringBootProject\\mail\\src\\main\\resources\\static\\java.jpg"));
        mailSender.send(mimeMessage);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值