java使用阿里云邮箱发送邮件

java使用阿里云邮箱发送邮件,第1张

1. 需求

现在需要在用户注册的时候,注册时给用户发送一条注册成功的邮件(异步发送, @Async注解)
在用户修改密码的时候,发送一条验证码邮件(1分钟内只能发送一次,15分钟有效),并实现密码修改

2. 实现 2.1 依赖
 <!--发送邮件的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(); } } }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/797535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存