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

具体需求功能:

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

(1)登录邮箱配置

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

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

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

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

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

# 发送邮件配置
mail:  
# 发件人地址  
	user: 461618768@qq.com  
# 发件人密码  
	password: yioaiekdcphnbije

(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;
    }


}

(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 = "恭喜您注册成功!<a href = '" + activeUrl + "'>点击激活</a>完成账号认证";
        mailUtils.sendMail(member.getEmail(), text, "旅游网激活邮件");

        //保存用户
        memberMapper.insert(member);
        return new Result(true, "注册成功");


    }

(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 "激活成功,请<a href='" + projectPath + "/frontdesk/login'>登录</a>";
        }
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

取酒鱼食--【余九】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值