• 猿创征文|瑞吉外卖——移动端_邮箱验证码登录


    个人名片:

    博主酒徒ᝰ.
    专栏瑞吉外卖
    个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
    本篇励志如果决意去做一件事了就不要再问自己和别人值不值得。

    本项目基于B站黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目。

    视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis
    plus开发核心技术的真java实战项目】 https://www.bilibili.com/video/BV13a411q753?
    点击观看

    一、原因

    对于个人来说,几乎是申请不到短信的模板签名。这些模板一般是企业所用。
    我们只是练习项目,没有必须花费金钱去申请到签名,最好却只有一两次。
    最后,也是最重要的一点。白嫖的才是最香的。

    自己添加
    因为前端代码修改的话很麻烦,所有就直接将验证码发送发送到邮箱了。
    在发送验证码操作中进行添加如下代码。

    二、邮箱

    1. 邮箱的优点

    QQ邮箱向用户提供安全、稳定、快速、便捷电子邮件服务的邮箱产品,已为超过1亿的邮箱用户提供免费和增值邮箱服务。
    QQ邮件服务以高速电信骨干网为强大后盾,独有独立的境外邮件出口链路,免受境内外网络瓶颈影响,全球传信。
    采用高容错性的内部服务器架构,确保任何故障都不影响用户的使用,随时随地稳定登录邮箱,收发邮件通畅无阻。

    1. 代码实现
      在生成验证码,紧接着执行以下代码,将验证码发送到你的邮箱。需要有两个邮箱才可以哦!
      一个邮箱发送,一个邮箱接受。
    //QQ邮箱发送验证码
    try {
        userService.send_email("接收邮箱", "邮件标题");
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    完整代码如下:

    /**
    * 发送验证码
    * @param user
    * @param session
    * @return
    */
    @PostMapping("/sendCode")
    public R<String> sendCode(@RequestBody User user, HttpSession session){
    
        //获取移动端输入手机号
        String phone = user.getPhone();
    
        //手机号不为空,则发送验证码。
        if (StringUtils.isNotEmpty(phone)){
            //生成验证码
            String code = ValidateCodeUtils.generateValidateCode(4).toString();
            log.info("code:{}", code);
    
            //短信发送验证码 就不写了
    
            //QQ邮箱发送验证码
            try {
                userService.send_email("接收邮箱", "邮件标题");
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            //保存验证码 session
            session.setAttribute(phone, code);
            return R.success("验证码发送成功");
        }
        return R.error("验证码发送失败");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在IUserService中建立send_email接口
    这里为了更好的阅读,就将业务写入了业务层中,其实,每一个地方都应该这么做。

    void send_email(String email, String msg) throws Exception;
    
    • 1

    在实现类中实现方法

    package com.itheima.reggie.service.impl;
    
    import com.itheima.reggie.entity.User;
    import com.itheima.reggie.mapper.UserMapper;
    import com.itheima.reggie.service.IUserService;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.itheima.reggie.utils.Email_Util;
    import org.springframework.stereotype.Service;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import java.util.Date;
    import java.util.Properties;
    
    /**
     * 

    * 用户信息 服务实现类 *

    * * @author 酒徒 * @since 2022-09-04 */
    @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { @Override public void send_email(String email, String msg) throws Exception{ String to = email; //发送到哪个邮箱,及目标邮箱 String subject = "验证码"; //邮件标题 String content = msg; //邮件内容 Properties properties = new Properties(); properties.put("mail.smtp.host", "smtp.qq.com"); properties.put("mail.smtp.port", "25");//邮箱端口号 properties.put("mail.smtp.auth", "true"); Authenticator authenticator = new Email_Util("发送邮箱", "发送邮箱的授权码,这个网上很容易找到教程的");//你的邮箱,与授权码 javax.mail.Session sendMailSession = javax.mail.Session.getDefaultInstance(properties, authenticator); MimeMessage mailMessage = new MimeMessage(sendMailSession); mailMessage.setFrom(new InternetAddress("发送邮箱"));//发送邮件的地址/就填你的qq邮箱 // Message.RecipientType.TO属性表示接收者的类型为TO mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); mailMessage.setSubject(subject, "UTF-8"); mailMessage.setSentDate(new Date()); // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 Multipart mainPart = new MimeMultipart(); // 创建一个包含HTML内容的MimeBodyPart BodyPart html = new MimeBodyPart(); html.setContent(content.trim(), "text/html; charset=utf-8"); mainPart.addBodyPart(html); mailMessage.setContent(mainPart); Transport.send(mailMessage); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    OpenCV(二十四):可分离滤波
    【原创工具】ADBGUI - GUI版ADB操作工具
    Python采集股票数据信息【含带完整源码】
    java通过lock实现同步锁
    3万一5万新能源电动汽车,3万内的新能源电动轿车
    Java注解以及自定义注解
    【FreeSwitch开发实践】外呼网关配置(拨打电话)
    常用工具类Commons-Configuration2简介
    【C语言】字符函数和内存操作函数
    (万字详解)MySQL增删改查(基础+进阶)
  • 原文地址:https://blog.csdn.net/m0_65144570/article/details/126814904