首页 > 其他分享 >springboot 发送邮箱验证码

springboot 发送邮箱验证码

时间:2023-06-05 13:12:14浏览次数:47  
标签:mail spring boot 验证码 org 邮箱 springboot

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: [email protected]
    #授权码
    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 测试接口

@RestController
@RequestMapping("/email")
public class EmailController {

    // 这个是 mail 依赖提供给我们的发送邮件的接口
    @Autowired
    private JavaMailSender mailSender;

    // 获取发件人邮箱
    @Value("${spring.mail.username}")
    private String sender;

    // 获取发件人昵称
    @Value("${spring.mail.nickname}")
    private String nickname;

    /**
     * 获取验证码
     * @param email 收件人
     * @return 验证码信息
     */
    @GetMapping("/code")
    public String getCode(@RequestParam("email")String email){

        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(nickname + '<' + sender + '>');
        message.setTo(email);
        message.setSubject("欢迎访问临安剑客");

        // 使用 hutool-all 生成 6 位随机数验证码
        String code = RandomUtil.randomNumbers(6);

        String content = "【验证码】您的验证码为:" + code + " 。 验证码五分钟内有效,逾期作废。\n\n\n" +
                "------------------------------\n\n\n" +
                "更多博客可访问:\n\n" +
                "https://www.cnblogs.com/huang-guosheng/\n\n" +
                "或\n\n" +
                "https://blog.itsheng.cn/";

        message.setText(content);

        mailSender.send(message);

        return "发送成功!";
    }

}

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: [email protected]
    #授权码
    password: xxx

    # 昵称
    nickname: 临安剑客

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

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

EmailController

package cn.itsheng.email.emailtest.controller;

import cn.hutool.core.util.RandomUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/email")
public class EmailController {

    // 这个是 mail 依赖提供给我们的发送邮件的接口
    @Autowired
    private JavaMailSender mailSender;

    // 获取发件人邮箱
    @Value("${spring.mail.username}")
    private String sender;

    // 获取发件人昵称
    @Value("${spring.mail.nickname}")
    private String nickname;

    /**
     * 获取验证码
     * @param email 收件人
     * @return 验证码信息
     */
    @GetMapping("/code")
    public String getCode(@RequestParam("email")String email){

        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(nickname + '<' + sender + '>');
        message.setTo(email);
        message.setSubject("欢迎访问临安剑客");

        // 使用 hutool-all 生成 6 位随机数验证码
        String code = RandomUtil.randomNumbers(6);

        String content = "【验证码】您的验证码为:" + code + " 。 验证码五分钟内有效,逾期作废。\n\n\n" +
                "------------------------------\n\n\n" +
                "更多博客可访问:\n\n" +
                "https://www.cnblogs.com/huang-guosheng/\n\n" +
                "或\n\n" +
                "https://blog.itsheng.cn/";

        message.setText(content);

        mailSender.send(message);

        return "发送成功!";
    }
}

标签:mail,spring,boot,验证码,org,邮箱,springboot
From: https://www.cnblogs.com/huang-guosheng/p/17457522.html

相关文章

  • springboot集成Knife4j
    1.springboot我用的2.7.X引入maven<!--整合Knife4j--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>......
  • SpringBoot中的定时任务的同步与异步
    SpringBoot中的定时任务的同步与异步你确定真的知道?授人以渔Java领域;架构知识;面试心得;互联网行业最新资讯定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过期的数据,定时发送邮件等等,实现定时任务调度的方式也十分多样,本篇文章主要学习各种实现定时任务......
  • SpringBoot中的MapStruct使用
    目的:MapStruct可以实现对象之间的转换一、引入依赖<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mapstruct--><dependency><groupId>org.m......
  • Springboot 链接DataSource前检查或创建库,并设置时区及sql_mode
    /**Copyright(c)2022.AsiacomTechnologyInc.Allrightsreserved*/importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Configuration;......
  • SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到Spri
    SpringBoot打包成WAR包的时候把第三方jar包打到LIB文件夹下和把第三方jar包打入到SpringBootjar包中转载首先我们应该知道我们把SPRINGBOOT项目打包成WAR包和JAR包的时候分别需要何种插件我们最常用的把springBoot打成jar包的插件是下面这样的一个插件,这是把我们的springBoot......
  • random模块生成六位随机数字+大小写验证码
    random模块生成六位随机数字+大小写验证码【一】代码importrandom'''生成六位随机(数字+大小写)验证码'''defget_verify_code(n):code=''foriinrange(n):random_int=str(random.randint(0,9))#0-9之间的整数random_upper......
  • springboot案列
    当创建多个springboot项目在同一个文件时,注意每一个springboot项目的serverport(端口)要不一样,否则会报错;另外要注意的是:在创建的springboot目录中;其他它文件的目录必须在springboot的项目的内部,否则会找不到指定的内容,报404错误 ......
  • 手把手实现springboot整合flowable、附源码-视频教程
    手把手实现springboot整合flowable、附源码-视频教程[toc]视频教程点击:https://www.bilibili.com/video/BV1fa411j7Q5/插件安装BPMN绘图可视化工具>FlowableBPMNvisualizer导入依赖<dependency><groupid>org.springframework.boot</groupid><artifact......
  • 面试官:我们简单聊一下SpringBoot的启动流程吧。
    SpringBoot启动原理每次看到这个问题总是不能理出一条线来回答流畅,这次理出一条八股文标准答案出来。复习的时候拿出来过一过思路。如果有不合适的地方希望各位大佬指教~[源码基于springboot2.4.3]框架启动类每个SpringBoot项目都有一个标注着@SpringBootApplication注解的main启动......
  • springboot整合mybatis
    整合mybatis基础配置启动类添加@MapperScan配置文件#=================================数据库相关配置====================================spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://10.1.1.1:3306/db?useUnico......