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

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

开启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;
       }

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

                ​​​​​​​

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值