SpringBoot邮件发送功能

SpringBoot邮件发送功能

邮件发送其实是一个非常常见的需求,用户注册,找回密码,地址寻回,订阅回访等多个地方都会用到,使用JavaSE代码发送邮件,对于初学者来说是一件步骤复杂的事情,但是在Spring Boot 中关于邮件发送,是有相关的自动化配置类提供的,该类使得邮件发送变得非常容易。

其中归类总结了5种相关的邮件发送方式

首先你得了解发送邮件的基础

邮件基础

我们经常会听到各种各样的邮件协议,不同的邮箱使用的协议也是不同的,比如 SMTP、POP3、IMAP ,那么这些协议有什么作用,有什么区别?我们先来讨论一下这个问题。

SMTP 是一个基于 TCP/IP 的应用层协议,江湖地位有点类似于 HTTP,SMTP 服务器默认监听的端口号为 25 。看到这里,小伙伴们可能会想到既然 SMTP 协议是基于 TCP/IP 的应用层协议,那么我是不是也可以通过 Socket 发送一封邮件呢?回答是肯定的。

我们都知道现实生活中的邮件寄送是需要以下几个步骤的:
例如:位于贵阳的小明需要将邮件寄给位于成都的小红
流程如下:

小明——》贵阳邮局——》成都邮局——》小红

  1. SMTP

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

  1. List item

POP3 协议全称为 Post Office Protocol ,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则,邮件服务商都会为每一个用户提供专门的邮件存储空间,SMTP 服务器收到邮件之后,就将邮件保存到相应用户的邮件存储空间中,如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。

  1. IMAP
    最后的 IMAP 协议,这个协议是对 POP3 协议的扩展,功能更强,作用类似

准备工作

想要发送邮件,就需要在邮件服务商申请授权码,这里以常用的 QQ 邮箱做演示,向大家演示授权码的申请流程:

  • 首先我们需要先登录 QQ 邮箱网页版,点击上方的设置按钮,然后点击账户选项卡:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

  • 在账户选项卡中找到开启POP3/SMTP选项,如下:
    在这里插入图片描述

  • 点击开启,开启相关功能
    开启过程需要手机号码验证,按照步骤操作即可。开启成功之后,即可获取一个授权码,将该号码保存好,一会使用。

项目创建

接下来,我们就可以创建项目了,Spring Boot 中,对于邮件发送提供了自动配置类,开发者只需要加入相关依赖,然后配置一下邮箱的基本信息,就可以发送邮件了。

首先创建一个 Spring Boot 项目

  1. 引入邮件发送依赖:

创建完成后,项目依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 配置邮箱基本信息
    项目创建成功后,接下来在 application.properties或者application.yml文件中配置邮箱的基本信息:
    properties格式
#配置 SMTP 服务器地址
spring.mail.host=smtp.qq.com
#SMTP 服务器的端口
spring.mail.port=587
#配置邮箱用户名
spring.mail.username=1774731598@qq.com
#配置密码,注意,不是真正的密码,而是刚刚申请到的授权码
spring.mail.password=ubknfzhjkhrbbabe
#默认的邮件编码
spring.mail.default-encoding=UTF-8
#配置SSL加密工厂
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
#表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
spring.mail.properties.mail.debug=true

yml格式

spring: 
  mail: 
    host: smtp.qq.com #配置 SMTP 服务器地址
    port: 587  # SMTP服务器的端口
    username: 1774731598@qq.com #配置邮箱用户名
    password: ubknfzhjkhrbbabe #配置密码,注意,不是真正的密码,而是刚刚申请到的授权码
    default-encoding: UTF-8 #        默认的邮件编码
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory #配置SSL加密工厂
        debug: true  #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误

配置含义分别如下:
其余参数配置可以参考腾讯的邮箱文档

  1. 做完这些之后,Spring Boot 就会自动帮我们配置好邮件发送类,相关的配置在 org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration 类中,
    部分源码如下:
@Configuration
@ConditionalOnClass({
    MimeMessage.class, MimeType.class, MailSender.class })
@ConditionalOnMissingBean(MailSender.class)
@Conditional(MailSenderCondition.class)
@EnableConfigurationProperties(MailProperties.class)
@Import({
    MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })
public class MailSenderAutoConfiguration {
   
}

从这段代码中,可以看到,导入了另外一个配置类 MailSenderPropertiesConfiguration 类,这个类中,提供了邮件发送相关的工具类:

@Configuration
@ConditionalOnProperty(prefix = "spring.mail", name = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 提供了简单而强大的邮件发送功能。以下是使用 Spring Boot 发送邮件的基本步骤: 1. 配置邮件发送参数:在 `application.properties`(或 `application.yml`)文件中配置邮件发送相关的参数,例如邮件服务器地址、端口、认证信息等。例如: ```properties spring.mail.host=smtp.example.com spring.mail.port=587 spring.mail.username=your-email@example.com spring.mail.password=your-email-password ``` 2. 创建一个邮件发送服务类:创建一个 Java 类,用于封装邮件发送的逻辑。可以使用 Spring Boot 提供的 `JavaMailSender` 类来发送邮件。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 3. 在需要发送邮件的地方调用邮件发送服务:在需要发送邮件的地方,注入邮件发送服务,并调用其方法发送邮件。例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/send-email") public String sendEmail() { emailService.sendEmail("recipient@example.com", "Hello", "This is a test email"); return "Email sent"; } } ``` 以上是使用 Spring Boot 发送邮件的基本步骤。根据实际需求,你还可以使用模板引擎来发送 HTML 邮件,添加附件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值