• java项目实现发送邮箱激活用户功能


    具体需求功能:

    前台用户注册_发送邮件配置在用户注册时,通过发送一个邮件给用户,来激活用户,主要是用来看看该用户是否不为空用户。

    (1)登录邮箱配置

    配置邮箱第三方登录。我们在系统中使用邮箱发送邮件属于第三方登录,而市面上的邮箱默认是不能第三方登录的。我们需要登录邮箱,配置第三方登录。以QQ邮箱配置举例: 登录QQ邮箱,点击设置——账户:

    在这里插入图片描述
    开启POP3/SMTP服务:
    在这里插入图片描述
    用密保手机向1069070069发送短信配置邮件客户端,发送完成后点击我已发送。
    在这里插入图片描述
    记住授权码,该授权码就是配置发件人时的邮箱密码:
    在这里插入图片描述

    (2)在pom中引入发送邮件依赖

    
    <dependency>    
    	<groupId>org.springframework.bootgroupId>  
    	<artifactId>spring-boot-starter-mailartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (3)在yml文件配置发件人用户名密码

    # 发送邮件配置
    mail:  
    # 发件人地址  
    	user: 461618768@qq.com  
    # 发件人密码  
    	password: yioaiekdcphnbije
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (4)引入邮件发送工具类

    package com.zhang.travel.utils;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    /**
     * 发邮件工具类
     */
    @Component
    public final class MailUtils {
        @Value("${mail.user}")
        private String USER; // 发件人邮箱地址
        @Value("${mail.password}")
        private String PASSWORD; // 如果是qq邮箱可以使户端授权码
    
        /**
         * 发送邮件
         * @param to 收件人邮箱
         * @param text 邮件正文
         * @param title 标题
         */
        public boolean sendMail(String to, String text, String title){
            try {
                final Properties props = new Properties();
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.host", "smtp.qq.com");
    
                // 发件人的账号
                props.put("mail.user", USER);
                //发件人的密码
                props.put("mail.password", PASSWORD);
    
                // 构建授权信息,用于进行SMTP进行身份验证
                Authenticator authenticator = new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        // 用户名、密码
                        String userName = props.getProperty("mail.user");
                        String password = props.getProperty("mail.password");
                        return new PasswordAuthentication(userName, password);
                    }
                };
                // 使用环境属性和授权信息,创建邮件会话
                Session mailSession = Session.getInstance(props, authenticator);
                // 创建邮件消息
                MimeMessage message = new MimeMessage(mailSession);
                // 设置发件人
                String username = props.getProperty("mail.user");
                InternetAddress form = new InternetAddress(username);
                message.setFrom(form);
    
                // 设置收件人
                InternetAddress toAddress = new InternetAddress(to);
                message.setRecipient(Message.RecipientType.TO, toAddress);
    
                // 设置邮件标题
                message.setSubject(title);
    
                // 设置邮件的内容体
                message.setContent(text, "text/html;charset=UTF-8");
                // 发送邮件
                Transport.send(message);
                return true;
            }catch (Exception e){
                e.printStackTrace();
            }
            return false;
        }
    
    
    }
    
    
    • 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
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    (5)测试发送激活邮件

    ①在yml中配置项目路径
    ②编写service类

     public Result register(Member member) {
            //1.保存用户
            QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("username", member.getUsername());
            List<Member> members = memberMapper.selectList(queryWrapper);
            if (members.size() > 0) {
                return new Result(false, "该用户名已存在");
            }
    
            //验证手机是否重复
            QueryWrapper<Member> queryWrapper1 = new QueryWrapper<>();
            queryWrapper1.eq("phoneNum", member.getPhoneNum());
            List<Member> members1 = memberMapper.selectList(queryWrapper1);
            if (members1.size() > 0) {
                return new Result(false, "该手机号已被注册");
            }
    
            //验证邮箱是否重复
            QueryWrapper<Member> queryWrapper2 = new QueryWrapper<>();
            queryWrapper2.eq("email", member.getEmail());
            List<Member> members2 = memberMapper.selectList(queryWrapper2);
            if (members2.size() > 0) {
                return new Result(false, "该邮箱已被注册");
            }
    
            //加密密码
            String password = encoder.encode(member.getPassword());
            member.setPassword(password);
    
            //设置用户状态
            member.setActive(false);
    
            // 2.发送激活邮件
            // 生成激活码
            String activeCode = UUID.randomUUID().toString();
            // 给用户的邮箱发送一封邮件,该邮件包含一个链接,链接中包含激活码
            String activeUrl = projectPath + "/frontdesk/member/active?activeCode=" + activeCode;
            String text = "恭喜您注册成功!点击激活完成账号认证";
            mailUtils.sendMail(member.getEmail(), text, "旅游网激活邮件");
    
            //保存用户
            memberMapper.insert(member);
            return new Result(true, "注册成功");
    
    
        }
    
    • 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

    (6)第五步

    激活用户

     public String active(String checkCode) {
            //根据激活码查询用户
            QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("checkCode", checkCode);
            Member member = memberMapper.selectOne(queryWrapper);
    
            if (member == null) {
                return "激活失败,激活码错误!";
            } else {
                member.setActive(true);
                memberMapper.updateById(member);
                return "激活成功,请登录";
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    TreeUtils工具类一行代码实现列表转树【第三版优化】 三级菜单 三级分类 附视频
    简直不能相信!这款IDE仅插件10秒写出飞机大战游戏,太神奇了!
    Unix环境高级编程--8-进程控制---8.7函数waitid 8.8函数wait3 wait4
    绘制一个五角红星图形(Python)
    性能指标详解
    【Mybatis】使用注解开发
    华为云磁盘挂载
    SpringBoot(One·上)
    【车载开发系列】Autosar框架中的WatchDog
    【数据物语系列】 漫谈数据分布可视化分析
  • 原文地址:https://blog.csdn.net/weixin_52162723/article/details/126514455