Spring Boot项目邮箱验证码功能的实现(以QQ邮箱为例)

您所在的位置:网站首页 pokemmo登录邮箱验证码 Spring Boot项目邮箱验证码功能的实现(以QQ邮箱为例)

Spring Boot项目邮箱验证码功能的实现(以QQ邮箱为例)

2023-12-08 08:48| 来源: 网络整理| 查看: 265

既然前两天翻出我大学时期做的一个项目,那正好顺手将其中的邮箱验证码功能也分享记录一下。

开启QQ邮箱传输协议服务

进入QQ邮箱界面,点击设置——账户——开启以下两个服务,当开启IMAP/SMTP会有一串密文密码,保存起来,那个就是我们项目中所需要用到的邮箱密码,并非是你的QQ密码。

 pom.xml配置邮箱服务依赖 org.springframework.boot spring-boot-starter-mail 在配置文件application.properties中添加邮箱配置

username就是你的QQ邮箱账号,password就是你刚刚开启的邮箱服务所给的密文

#邮箱密码验证 spring.mail.default-encoding=UTF-8 [email protected] 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("[email protected]","hx--------eced"); } }); try { Message message = new MimeMessage(session); //2.1设置发件人: message.setFrom(new InternetAddress("[email protected]")); //2.2设置收件人 这个TO就是收件人 message.setRecipient(RecipientType.TO, new InternetAddress(to)); //2.3邮件的主题 message.setSubject("来自在线视频播放平台网站验证码邮件"); //2.4设置邮件的正文 第一个参数是邮件的正文内容 第二个参数是:是文本还是html的连接 message.setContent("来自在线视频播放平台网站验证码邮件,请接收你的验证码:你的验证码是:"+vcode+",请妥善保管好你的验证码!", "text/html;charset=UTF-8"); //3.发送一封激活邮件 Transport.send(message); }catch(MessagingException mex){ mex.printStackTrace(); } } } conreoller层接口调用实现向指定的邮箱发送验证码 @RequestMapping("findPassword") @ResponseBody public ResultDTO findPassword(@RequestBody User user) throws Exception{ ResultDTO userResultDTO=new ResultDTO(); ResultDTO 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; }

 将随机生成的验证码同时发送给前端,用来与用户输入的验证码比对是否一致,一致的情况下才允许找回密码并修改密码。

                ​​​​​​​

至此,邮箱验证码功能就可以实现使用了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3