用springboot发送邮箱验证码

导入依赖包

<!--邮箱发送包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

从qq邮箱官网中开启POP3/SMTP服务

在这里插入图片描述
在这里插入图片描述
开启服务后一定要记下服务密码,很重要!!

在配置文件application.properties中写上qq邮箱的基本信息

spring.mail.username=xxx@qq.com
spring.mail.password=xxx  #注意这里的密码不是邮箱密码,是前面开启POP3/SMTP服务时弹出的密码
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.stmp.ssl.enable=true

编写业务类


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailSendException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;

@Service
public class EmailService {
    @Autowired
    JavaMailSenderImpl mailSender;
    //从配置文件中获取发件人
    @Value("{spirng.mail.username}")
    private String sender;


    public String sendEmailVerCode(String receiver, String verCode) throws MailSendException {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("验证码");	//设置邮件标题
        message.setText("尊敬的用户,您好:\n"
                + "\n本次请求的邮件验证码为:" + verCode + ",本验证码5分钟内有效,请及时输入。(请勿泄露此验证码)\n"
                + "\n如非本人操作,请忽略该邮件。\n(这是一封自动发送的邮件,请不要直接回复)");	//设置邮件正文
        message.setTo(receiver);	//设置收件人
        message.setFrom("xxx@qq.com");	//设置发件人
        mailSender.send(message);	//发送邮件
        return verCode;
    }
}


这里最关键的业务操作其实springboot已经帮我们完成了,在自动注入JavaMailSenderImpl时,会自动检索配置文件application.properties中的账户密码以及主机信息,加载到对象中。

写一个生成验证码的工具类VerCodeGenerateUtil


import java.security.SecureRandom;
import java.util.Random;

public class VerCodeGenerateUtil {
    private static final Random RANDOM = new SecureRandom();

    /**
     * 生成6位随机数字
     * @return 返回6位数字验证码
     */
    public static String generateVerCode() {
        char[] nonceChars = new char[6];
        for (int index = 0; index < nonceChars.length; ++index) {
            nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(10));
        }
        return new String(nonceChars);
    }
}

在controller层中发送邮箱

    @PostMapping("/sendEmail")
    @ResponseBody
    public JsonResult sendEmail(String email, HttpSession session){

        String code=VerCodeGenerateUtil.generateVerCode();
        System.out.println(code);
        String result= emailService.sendEmailVerCode(email, code);
        session.setAttribute("email",result);
        System.out.println(result);
        return new JsonResult(200,"发送成功");
    }

写页面表单封装email到请求("/sendEmail")中发送给后端,也可以使用postman进行测试。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值