SpringBoot —— 实现邮件、短信的发送功能

本文介绍如何使用SpringBoot发送邮件,包括开启POP3和SMTP服务、配置环境、编写代码及测试等步骤。同时提供了发送简单邮件和HTML格式邮件的示例。

前言

SpringBoot系列Demo代码,实现邮件和短信的发送。

一、开启服务

1.POP3和SMTP协议

Spring框架为使用JavaMailSender接口发送电子邮件提供了一个简单的抽象,Spring Boot为它提供了自动配置以及启动模块。

在使用Spring Boot发送邮件之前,要开启POP3和SMTP协议,需要获得邮件服务器的授权码

SMTP 协议全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。

POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则

2.获取授权码

以QQ邮箱为例:
在这里插入图片描述
开启服务之后,会获得一个授权码:成功开启POP3/SMTP服务,在第三方客户端登录时,密码框请输入以下授权码:

二、使用步骤

1.环境配置

引入依赖

<!-- springboot 邮件mail -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--Thymeleaf-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

application.yml

spring:
  # 数据源
  datasource:
    url: jdbc:mysql://localhost:3306/local_develop?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  profiles:
    active: @spring.profiles.active@
  # 邮件
  mail:
    default-encoding: utf-8
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    #发送方邮件名
    username: 
    #授权码
    password: 
    # thymeleaf模板格式
    thymeleaf:
      cache: false
      encoding: UTF-8
      mode: HTML
      servlet:
        content-type: text/html
      prefix: classpath:/templates/
      suffix: .html

2.代码编写

SendMail.java

@Service
public class SendMail {

    private final static Logger LOGGER = LoggerFactory.getLogger(SendMail.class);

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String sendFrom;

    /**
     * 发送简单邮件
     *
     * @param sendTo  接收人
     * @param subject 邮件主题
     * @param text    邮件内容
     */
    public void sendSimpleMail(String sendTo, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(sendFrom);
        message.setTo(sendTo);
        message.setSubject(subject);
        message.setText(text);

        mailSender.send(message);
    }

    /**
     * 发送HTML格式的邮件,并可以添加附件
     *
     * @param sendTo  接收人
     * @param subject 邮件主题
     * @param content 邮件内容(html)
     * @param files   附件
     * @throws MessagingException
     */
    public void sendHtmlMail(String sendTo, String subject, String content, List<File> files) {
        MimeMessage message = mailSender.createMimeMessage();
        // true表示需要创建一个multipart message
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sendFrom);
            helper.setTo(sendTo);
            helper.setSubject(subject);
            helper.setText(content, true);

            //添加附件
            for (File file : files) {
                helper.addAttachment(file.getName(), new FileSystemResource(file));
            }
            mailSender.send(message);
        } catch (MessagingException e) {
            LOGGER.warn("邮件发送出错:{}", e);
        }
    }
}

SendMailController.java

@Api(value = "邮件发送接口", tags = "邮件发送接口")
@RestController
@RequestMapping("/index")
public class SendMailController {

    @Autowired
    private SendMail sendMail;

    @Autowired
    private TemplateEngine templateEngine;

    @ApiOperation(value = "发送简单邮件", notes = "发送简单邮件")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "sendTo", required = true, value = "接收人"),
            @ApiImplicitParam(name = "subject", required = false, value = "邮件主题"),
            @ApiImplicitParam(name = "text", required = false, value = "邮件内容"),
    })
    @GetMapping("/sendSimpleMail")
    public ApiResponse sendSimpleMail(@RequestParam String sendTo,
                                      @RequestParam(required = false) String subject,
                                      @RequestParam(required = false) String text) {
        sendMail.sendSimpleMail(sendTo, subject, text);
        return ApiResponse.ok();
    }

    @ApiOperation(value = "发送HTML格式的邮件", notes = "使用Thymeleaf模板发送邮件")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "sendTo", required = true, value = "接收人"),
            @ApiImplicitParam(name = "subject", required = false, value = "邮件主题"),
            @ApiImplicitParam(name = "content", required = true, value = "邮件模板"),
    })
    @GetMapping("/sendHtmlMail")
    public ApiResponse sendHtmlMail(@RequestParam String sendTo,
                                    @RequestParam(required = false) String subject,
                                    @RequestParam String content) {
        Context context = new Context();
        context.setVariable("username", "xx");
        context.setVariable("num", "007");
        // 模板
        String template = "mail/" + content;
        List<File> files = new ArrayList<>();
        sendMail.sendHtmlMail(sendTo, subject, templateEngine.process(template, context), files);
        return ApiResponse.ok();
    }

}

mail.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>hello 欢迎加入 荣华富贵 大家庭,您的入职信息如下:</p>
<table border="1">
    <tr>
        <td>姓名</td>
        <td th:text="${username}"></td>
    </tr>
    <tr>
        <td>工号</td>
        <td th:text="${num}"></td>
    </tr>
</table>
<div style="color: #ff1a0e">加油加油</div>
<div style="color: #ff1a0e">努力努力!</div>
<div style="color: #ff1a0e">今天睡地板,明天当老板!</div>
</body>
</html>

3.邮件发送测试

启动项目,打开http://localhost:8080/doc.html
在这里插入图片描述
调试接口,效果如下:
在这里插入图片描述
在这里插入图片描述

4.短信发送

短信发送通过调用API实现,具体参考:https://blog.csdn.net/qq_34383510/article/details/115939788

本文参考:http://springboot.javaboy.org/2019/0717/springboot-mail

« 上一章:SpringBoot —— 整合Logback,输出日志到文件
» 下一章:SpringBoot —— 多线程定时任务的实现(注解配置、task:annotation-driven配置)

适用人群通用各大网易系,腾讯QQ系,新浪系,阿里系等主流邮箱;同时也适用于企业开发的企业邮箱,进行收件发件。课程概述通用各大网易系,腾讯QQ系,新浪系,阿里系等主流邮箱;同时也适用于企业开发的企业邮箱,进行收件发件。POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。   SMTP 认证,简单地说就是要求必须在提供了账户名密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。。【开发者如何进行快速开发邮件发送系统???本课程系统进行快速研发,项目实战】 部分截图如下:完整版请查看课件或者视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.猫的树

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值