IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java使用阿里云邮箱发送邮件 -> 正文阅读

[Java知识库]java使用阿里云邮箱发送邮件

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 = "<p>&nbsp;&nbsp;&nbsp;尊敬的【username】:</p ><nav></nav><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您好,感谢您对" + saasConfig.getName() + "媒体服务平台的信任和支持!</p ><nav></nav><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请登录" + saasConfig.getName() + "平台开启您的收益提升之旅,登录地址: https://app.medproad.com</p ><nav></nav><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果您有其他问题,请通过support@medproad.com与我们联系</p ><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p ><nav></nav><p>&nbsp;&nbsp;&nbsp;&nbsp;Medpro团队</p ><nav></nav>";
	  //创建一个 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 =
	                "<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您好,您正在修改" + saasConfig.getName() + "登录密码,请在验证码输入框输入: 【code】 ,验证码有效期\n" +
	                        "&nbsp;&nbsp;&nbsp;&nbsp;为15分钟,请尽快完成操作。验证码提供给他人可能导致账号被盗,请勿泄露,谨防被骗。</p >" +
	                        "<p>&nbsp;&nbsp;&nbsp;&nbsp;" + saasConfig.getName() + "团队</p >";
	        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();
	        }
	    }
	}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:33:33  更:2022-05-01 15:36:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:21:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码