springboot 发送邮箱验证码

临安剑客 / 2023-06-05 / 原文

0 步骤总览

  1. 开启邮箱的 POP3/SMTP 服务。
  2. 新建 springboot 项目。
  3. 导入依赖。
  4. 配置配置文件。
  5. 编写 controller 测试接口。
  6. postman 中测试

1 开启邮箱的 POP3/SMTP 服务

这里我用的网易邮箱,其它邮箱类似步骤,不清楚的可以百度。

总之就是要打开 pop3/smtp 服务,如果按照我的方法找不到,可以百度。

打开后生成授权码,会获得一个授权码,这个授权码很重要,后面会用到。

如果不会生成或没有生成的,百度查一下。

如果是 qq 邮箱,依次点击 设置 =》账户 往下拉就可以找到。

如果没找到,百度即可。

2 新建 springboot 项目

依次点击 文件 =》新建 =》项目,会弹出以下界面:

注意这里的 名称 和 组 都是我改过的,如果没有个性化需求,默认即可。

点击下一步:

版本默认,这里我只勾选了两个依赖,其它的后面补上。

点击创建即可。

我们看一下目录结构:

注意红框里的内容是项目自动生成的我们不需要的部分(如果你的没有自动生成,就不用管)。可以选择删除(强迫症)。

因为个人习惯,我会把 application.properties 文件改为 application.yml 文件。

改造后的:

注意这里的文件名已经被我改了。

配置文件(application.yml)初始内容:

# 应用服务 WEB 访问端口
server:
  port: 8080

3 导入依赖

在 pom.xml 文件第二层标签 dependencies 标签内引入依赖

这里我导入两个依赖,分别是 spring-boot-starter-mail 和 hutool-all

<!-- 邮箱验证码依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 一个很强大的工具库 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.19</version>
</dependency>

这里的 hutool-all 工具库主要用来生成随机验证码(当然它的功能远不止这些)。

更多关于 hutool-all 的信息参考:入门和安装 (hutool.cn)

4 配置配置文件

spring:
  #邮箱验证码配置
  mail:
    #smtp服务主机  qq邮箱则为smtp.qq.com; 163邮箱是smtp.163.com
    host: smtp.163.com
    #服务协议
    protocol: smtp
    # 编码集
    default-encoding: UTF-8
    #发送邮件的账户
    username: xxx@xxx.com
    #授权码
    password: xxx

    # 昵称
    nickname: 临安剑客

    test-connection: true
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

注意这里的 password 就是第一步时生成的授权码。

其中的 username 是你第一步中操作的邮箱账号。

nickname 是接收者收到邮件中显示的发件人。

host 是根据服务主机区分,网易163 邮箱是 smtp.163.com, qq 邮箱是 smtp.qq.com。

其它的默认即可。

5 controller 测试接口


6 测试

运行项目后在 postman 中测试接口:

打码的地方就是需要你输入自己接收邮件的邮箱。

接收效果:

可以看到,邮件发送成功

7 附录

这里贴出一些关键文件代码:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.itsheng.email</groupId>
    <artifactId>EmailTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>EmailTest</name>
    <description>EmailTest</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- 邮箱验证码依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

        <!-- 一个很强大的工具库 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.19</version>
        </dependency>


    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>cn.itsheng.email.emailtest.EmailTestApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

# 应用服务 WEB 访问端口
server:
  port: 8080

spring:
  #邮箱验证码配置
  mail:
    #smtp服务主机  qq邮箱则为smtp.qq.com; 163邮箱是smtp.163.com
    host: smtp.163.com
    #服务协议
    protocol: smtp
    # 编码集
    default-encoding: UTF-8
    #发送邮件的账户
    username: xxx@xxx.com
    #授权码
    password: xxx

    # 昵称
    nickname: 临安剑客

    test-connection: true
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

注意这里的 host、username、password(授权码)、nickname 要因人而异的。其中 host 和你使用的邮箱服务商有关。

EmailController