SpringBoot实现新版QQ邮箱发送随机6位验证码(附源码)
1 开启邮箱协议与授权
-
1、登陆邮箱,点击设置,进入账户,下拉页面
-
2、找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务设置。这里我们可以开启服务
- 3 点击开启后,会要求你发送短信验证,手机微信扫码,确认发送短信。之后点击PC端我已发送。
- 4 复制授权码备用,之后输入“备注授权码用途”,方便后期管理授权码,区分或停用。点击关闭页面,我填写的用途是 个人电脑。
- 5 可以到账号页面,根据需要勾选收取选项,点击保存更改。
- 6 可以管理服务,管理授权码或关闭开启服务。
- 7授权码管理
图片中的未备注用途会显示如上“授权码_尾号”,备注的则为 “个人电脑”
2 代码实现
- 1 引入依赖
- <!-- 邮件依赖 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
<!-- @ConfigurationProperties依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 2 代码实现
@LogAnnotation(module = "用户基础模块" , operator = "获取验证码")
@PostMapping("/loginSendCodeEmail")
public String sendAuthCodeEmail(){
String email = "收件人邮箱@qq.com";
String code = generateValidateCode(6).toString();
System.out.println(
"尊敬的用户:你好! 登录验证码为:" + code + "(有效期为五分钟)"
);
try {
HtmlEmail mail = new HtmlEmail();
mail.setHostName("smtp.qq.com"); //smtp服务地址
mail.setAuthentication("发件人邮箱@qq.com", "16位邮箱授权码"); // 邮件验证
mail.setCharset("UTF-8");
// smtp端口 email.setSmtpPort(emailProperties.getPort()); 我没有设置端口号,默认为465
mail.setFrom("发件人邮箱@qq.com", "单位名称XXXXX");
mail.setSSLOnConnect(true);
mail.addTo(email); // 收件人邮箱
mail.setSubject("系统登录验证码");
mail.setMsg("尊敬的用户:你好! 登录验证码为:" + code + "(有效期为五分钟)");
mail.send();
} catch (Exception var4) {
var4.printStackTrace();
return "邮件发送失败,请检查邮箱账号是否正确,请稍后重试。";
}
return code;
}
public static Integer generateValidateCode(int length) {
Integer code = null;
if (length == 4) {
code = (new Random()).nextInt(9999);
if (code < 1000) {
code = code + 1000;
}
} else {
if (length != 6) {
throw new RuntimeException("只能生成4位或6位数字验证码");
}
code = (new Random()).nextInt(999999);
if (code < 100000) {
code = code + 100000;
}
}
return code;
}