现在需要在用户注册的时候,注册时给用户发送一条注册成功的邮件(异步发送, @Async注解)
在用户修改密码的时候,发送一条验证码邮件(1分钟内只能发送一次,15分钟有效),并实现密码修改
<!--发送邮件的jar包-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dm</artifactId>
<version>3.1.0</version>
</dependency>
2.2 UserServiceimpl
@Resource
private ThreadTasks threadTasks;
//注册
@Override
public String register(RegisterUserVo vo) {
//user入库
// .....
//发送邮件(异步发送)
threadTasks.sendRegisteMail(sysUser);
}
//验证邮箱 并发送验证码邮件
@Override
public String verify(String email) {
//1.判断账户id是否已存在 不存在则创建
int count = userMapper.checkUserExist(email);
if (count == 0) {
return "用户名或密码错误,请重新输入!";
}
//判断1分钟内是否发送过验证码
String s = redisTemplate.opsForValue().get(RedisConstant.SAAS_VERIFICATION_CODE_EXIST + email);
if (!StringUtils.isEmpty(s)) {
return "您的 *** 作太频繁了,请稍后再试。";
}
//生成验证码,发送验证码
String code = randomCode();
//存储验证码至redis 一分钟有效,用于判断一分钟内是否重复发送验证码
redisTemplate.opsForValue().set(RedisConstant.SAAS_VERIFICATION_CODE_EXIST + email, code, 1, TimeUnit.MINUTES);
//存储验证码至redis 15分钟有效
redisTemplate.opsForValue().set(RedisConstant.SAAS_VERIFICATION_CODE + email, code, 15, TimeUnit.MINUTES);
//发送 验证码邮件
sendEmaiUtil.sendCodeMail(code, email);
return null;
}
//重置密码
@Override
public String resetPassword(RegisterUserVo vo) {
//判断验证码是否正确
String s = redisTemplate.opsForValue().get(RedisConstant.SAAS_VERIFICATION_CODE + vo.getEmail());
if (!vo.getCode().equals(s)) {
return "验证码有误!";
}
SysUser user = new SysUser();
user.setPassword(MD5Util.generate(vo.getPassword()));
user.setLoginId(vo.getEmail());
userMapper.resetPassword(user);
return null;
}
2.3 异步发送邮件
import com.ymob.saas.managerserver.pojo.sys.SysUser;
import com.ymob.saas.managerserver.utils.SendEmaiUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Transactional
@Component
@Slf4j
public class ThreadTasks {
@Resource
private SendEmaiUtil sendEmaiUtil;
//异步发送邮件
@Async
public void sendRegisteMail(SysUser sysUser) {
sendEmaiUtil.sendRegisterMail(sysUser);
}
2.4 发送邮件
2.4.1 发送注册邮件
SendEmaiUtil
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dm.model.v20151123.SingleSendMailRequest;
import com.aliyuncs.dm.model.v20151123.SingleSendMailResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.ymob.saas.managerserver.config.SaasConfig;
import com.ymob.saas.managerserver.pojo.sys.SysUser;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class SendEmaiUtil {
@Resource
private SaasConfig saasConfig;
//发送注册邮件
public void sendRegisterMail(SysUser sysUser) {
String str = " 尊敬的【username】:
您好,感谢您对"
+ saasConfig.getName() + "媒体服务平台的信任和支持! 请登录"
+ saasConfig.getName() + "平台开启您的收益提升之旅,登录地址: https://app.medproad.com 如果您有其他问题,请通过[email protected]与我们联系
Medpro团队
";
//创建一个 Aliyun Acs Client, 用于发起 OpenAPI 请求 ("cn-hangzhou", 阿里云云账号AccessKey ID , 阿里云云账号AccessKey Secret)
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tKx8r7TwRH3Arqttna9", "laMaU8QYkKwCF9WKpSfdj8AKlxyNn8");
IAcsClient client = new DefaultAcsClient(profile);
// 创建一个 SingleSendMailRequest 并设置请求参数
SingleSendMailRequest request = new SingleSendMailRequest();
try {
//发信地址
request.setAccountName(saasConfig.getEmailAccount());
//发信人昵称
request.setFromAlias(saasConfig.getName());
//地址类型。 取值:0:为随机账号 1:为发信地址
request.setAddressType(1);
//回复地址 是否启用管理控制台中配置好回信地址
request.setReplyToAddress(true);
//接收者邮箱
request.setToAddress(sysUser.getEmail());
//主题
request.setSubject("欢迎注册" + saasConfig.getName() + "媒体服务平台,我们等您很久了!");
//内容
String htmlBody = str.replaceAll("username", sysUser.getUsername());
request.setHtmlBody(htmlBody);
//请求方法
request.setMethod(MethodType.POST);
//发送邮件 获取响应
SingleSendMailResponse httpResponse = client.getAcsResponse(request);
} catch (ClientException e) {
//捕获错误异常码
System.out.println("ErrCode : " + e.getErrCode());
e.printStackTrace();
}
}
//发送验证码邮件
public void sendCodeMail(String code, String email) {
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tKx8r7TwRH3Arqttna9", "laMaU8QYkKwCF9WKpSfdj8AKlxyNn8");
IAcsClient client = new DefaultAcsClient(profile);
SingleSendMailRequest request = new SingleSendMailRequest();
String str =
" 您好,您正在修改"
+ saasConfig.getName() + "登录密码,请在验证码输入框输入: 【code】 ,验证码有效期\n" +
" 为15分钟,请尽快完成 *** 作。验证码提供给他人可能导致账号被盗,请勿泄露,谨防被骗。" +
" "
+ saasConfig.getName() + "团队";
try {
request.setAccountName(saasConfig.getEmailAccount());
request.setFromAlias(saasConfig.getName());
request.setAddressType(1);
request.setReplyToAddress(true);
request.setToAddress(email);
request.setSubject(saasConfig.getName() + "账号密码重置");
String htmlBody = str.replaceAll("code", code);
request.setHtmlBody(htmlBody);
request.setMethod(MethodType.POST);
SingleSendMailResponse httpResponse = client.getAcsResponse(request);
} catch (ClientException e) {
//捕获错误异常码
System.out.println("ErrCode : " + e.getErrCode());
e.printStackTrace();
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)