SpringBoot项目接入QQ邮箱,实现邮箱辅助验证
1.获取QQ邮箱授权码
登录QQ邮箱网页版,右上角账号与安全-安全设置-生成授权码
2.依赖添加
这里说明一下,我的SpringBoot项目是2.7.X版本的,我就找的对应的版本,如果版本不匹配可能会有问题
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.7.2</version>
</dependency>
3.代码实现
3.1 配置文件
#指定邮件服务器的主机名,这里默认是smtp.qq.com,表示使用的是腾讯的SMTP服务器
spring.mail.host=smtp.qq.com
#端口号 听说456也行,没试过
spring.mail.port=587
#你的email邮箱,这里是发送者
spring.mail.username=xxxxx@qq.com
#邮箱授权码
spring.mail.password=xxxxx
#设置邮件内容的默认编码格式为UTF-8 默认就是UTF-8
spring.mail.default-encoding=utf-8
#指定SSL Socket工厂类,用于创建加密的邮件连接
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
#设置为true表示启用自动连接
spring.mail.properties.mail.smtp.auto=true
#设置为true表示启用STARTTLS
spring.mail.properties.mail.starttls.enable=true
#设置为true表示STARTTLS是必需的,如果不可用,则会抛出异常
spring.mail.properties.mail.starttls.required=true
3.2 邮件工具类MailUtil
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
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.stereotype.Component;
/**
* 邮件工具类
*/
@Component
@Slf4j
public class EmailUtil {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String userName;// 用户发送者
// 创建一个发送邮箱验证的方法
public String sendEmail(String receiver){
try{
String subjectName = "登录验证";
String contentTemplate = "您正在执行登录操作,验证码是%s,2分钟内有效";
String verifyCode = RandomStringUtils.random(6, "0123456789");
String content = String.format(contentTemplate, verifyCode);
//定义email信息格式
SimpleMailMessage message = new SimpleMailMessage();
//设置发件人
message.setFrom(userName);
//接收者邮箱,为调用本方法传入的接收者的邮箱xxx@qq.com
message.setTo(receiver);
//邮件主题
message.setSubject(subjectName);
message.setText(content);
log.info("开始发送消息...");
mailSender.send(message);
log.info("消息发送成功...");
return "success";
}catch (Exception e){
log.error("sendEmail failed, exception: ",e);
return "failed";
}
}
}
3.3 创建个controller,启动项目,调用接口发送消息,完事儿
import com.gooluke.admin.common.utils.EmailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/email")
public class EmailController {
@Autowired
private EmailUtil emailUtil;
@RequestMapping("/send")
public String send(String receiver) {
return emailUtil.sendEmail(receiver);
}
}