既然前两天翻出我大学时期做的一个项目,那正好顺手将其中的邮箱验证码功能也分享记录一下。
开启QQ邮箱传输协议服务
进入QQ邮箱界面,点击设置——账户——开启以下两个服务,当开启IMAP/SMTP会有一串密文密码,保存起来,那个就是我们项目中所需要用到的邮箱密码,并非是你的QQ密码。
pom.xml配置邮箱服务依赖
<!--邮箱验证码验证-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在配置文件application.properties中添加邮箱配置
username就是你的QQ邮箱账号,password就是你刚刚开启的邮箱服务所给的密文
#邮箱密码验证
spring.mail.default-encoding=UTF-8
spring.mail.username=22-----246@qq.com
spring.mail.password=hxva----deced
spring.mail.host=smtp.qq.com
编写一个邮箱工具类
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;
/*
* 邮件发送工具类
*
* */
public class MailUtils {
//发送第二封验证码邮件
public static void sendMail(String to, int vcode) throws Exception{
//设置发送邮件的主机 smtp.qq.com
String host = "smtp.qq.com";
//1.创建连接对象,连接到邮箱服务器
Properties props = System.getProperties();
//Properties 用来设置服务器地址,主机名 。。 可以省略
//设置邮件服务器
props.setProperty("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
//SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable","true");
props.put("mail.smtp.ssl.socketFactory", sf);
//props:用来设置服务器地址,主机名;Authenticator:认证信息
Session session = Session.getDefaultInstance(props,new Authenticator() {
@Override
//通过密码认证信息
protected PasswordAuthentication getPasswordAuthentication() {
//new PasswordAuthentication(用户名, password);
//这个用户名密码就可以登录到邮箱服务器了,用它给别人发送邮件
return new PasswordAuthentication("22-----246@qq.com","hx--------eced");
}
});
try {
Message message = new MimeMessage(session);
//2.1设置发件人:
message.setFrom(new InternetAddress("22-----246@qq.com"));
//2.2设置收件人 这个TO就是收件人
message.setRecipient(RecipientType.TO, new InternetAddress(to));
//2.3邮件的主题
message.setSubject("来自在线视频播放平台网站验证码邮件");
//2.4设置邮件的正文 第一个参数是邮件的正文内容 第二个参数是:是文本还是html的连接
message.setContent("<h1>来自在线视频播放平台网站验证码邮件,请接收你的验证码:</h1><h3>你的验证码是:"+vcode+",请妥善保管好你的验证码!</h3>", "text/html;charset=UTF-8");
//3.发送一封激活邮件
Transport.send(message);
}catch(MessagingException mex){
mex.printStackTrace();
}
}
}
conreoller层接口调用实现向指定的邮箱发送验证码
@RequestMapping("findPassword")
@ResponseBody
public ResultDTO<User> findPassword(@RequestBody User user) throws Exception{
ResultDTO<User> userResultDTO=new ResultDTO<>();
ResultDTO<User> users=adminService.findUserByUserName2(user.getUserName());
//获取用户注册时存储的邮箱账号,这里原本想用短信验证的,后来改为用邮箱验证,字段名就偷懒没改
String mail=users.getData().get(0).getPhone();
//使用随机数生成简易的验证码
double ma=Math.random()*100;
int ma1=(int) ma;
String yzm=""+ma1;
MailUtils.sendMail(mail,ma1); //收件人邮箱和验证码
userResultDTO.setMsg(yzm);
userResultDTO.setData(users.getData());
return userResultDTO;
}
将随机生成的验证码同时发送给前端,用来与用户输入的验证码比对是否一致,一致的情况下才允许找回密码并修改密码。
至此,邮箱验证码功能就可以实现使用了