具体需求功能:
前台用户注册_发送邮件配置在用户注册时,通过发送一个邮件给用户,来激活用户,主要是用来看看该用户是否不为空用户。
(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>";
}
}