网页实现发送邮箱验证码

一、前期准备

一个邮箱,并且开通了SMTP服务
参考:邮箱如何开启POP3/SMTP服务

二、相关依赖

项目依托于springboot,部分依赖不作声明

		<!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>
                spring-boot-starter-data-redis
            </artifactId>
        </dependency>
        <!-- spring2.X集成redis所需common-pool -->
        <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.6.0</version>
        </dependency>
        <!-- web项目依赖 -->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>
                spring-boot-starter-web
            </artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 邮箱相关依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

三、配置文件

此处只给出相关的部分

#邮箱配置
#平台地址,这里用的是126邮箱,使用其他邮箱请更换
spring.mail.host = smtp.126.com
#改成自己的邮箱
spring.mail.username = 你的邮箱地址
#发送短信开通服务后它给你的授权码 填写到这里
spring.mail.password =授权码
#这东西不用改
spring.mail.properties.mail.smtp.ssl.enable=true
#编码格式
spring.mail.default-encoding=UTF-8

#redis 服务配置
spring.redis.host=主机
spring.redis.port=端口号
spring.redis.database=你的redis仓库号(一般就0)
spring.redis.timeout=1800000
spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0

四、Service层

接口省略

/**
 * Created by IntelliJ IDEA.
 * User: Zengc
 * Date: 2021/7/17
 * Time: 10:41
 **/
@Service
public class MsmServiceImpl implements MsmService {

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;

    @Override
    public String sendMineMail(String email) {
        try {
            SimpleMailMessage mailMessage = new SimpleMailMessage();
            // 设置邮件主题
            mailMessage.setSubject("测试邮箱验证码");
            // 工具类生成随机六位验证码
            String code = RandomCodeUtils.get6BitRandom();
            // 设置邮件内容
            mailMessage.setText("您收到的验证码是:"+code);
            // 设置收发人
            mailMessage.setFrom(from);
            mailMessage.setTo(email);
            // 发送
            mailSender.send(mailMessage);
            return code;
        } catch (MailException e) {
            e.printStackTrace();
            return "";
        }
    }
}

五、Controller层

/**
 * Created by IntelliJ IDEA.
 * User: Zengc
 * Date: 2021/7/17
 * Time: 10:37
 **/
@Api(description = "发送邮件")
@RestController
@RequestMapping("/api/msm")
public class MsmApiController {

    @Autowired
    private MsmService msmService;

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @ApiOperation("发送邮件")
    @GetMapping("/send/{email}")
    public R code(
            @ApiParam(name = "email", value = "邮箱", required = true)
            @PathVariable String email
    ){
        String code = redisTemplate.opsForValue().get(email);
        if (!StringUtils.isEmpty(code)){
            return R.ok().message("邮件已经发送过了,请稍后再试!");
        }
        // 发送邮件,返回验证码
        String codeResult = msmService.sendMineMail(email);
        if (!StringUtils.isEmpty(codeResult)){
            // 添加缓存并设置五分钟有效
            redisTemplate.opsForValue().set(email,codeResult,5, TimeUnit.MINUTES);
            return R.ok();
        }
        return R.error();
    }
}

七、测试

启动项目,浏览器访问路径(注意加上邮箱参数)即可测试
在这里插入图片描述

补上工具类:

/**
 * Created by IntelliJ IDEA.
 * User: Zengc
 * Date: 2021/7/17
 * Time: 11:17
 **/
public class RandomCodeUtils {
    /**
     * 获取四位验证码
     * @return
     */
    public static String get4BitRandom(){
        return String.valueOf((new Random().nextDouble())).substring(2,6);
    }

    /**
     * 获取六位验证码
     * @return
     */
    public static String get6BitRandom(){
        return String.valueOf((new Random().nextDouble())).substring(2,8);
    }

}

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值