0 步骤总览
- 开启邮箱的 POP3/SMTP 服务。
- 新建 springboot 项目。
- 导入依赖。
- 配置配置文件。
- 编写 controller 测试接口。
- 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