1.pom.xml导入jar包

        <!--阿里云短信 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version><exclusions><exclusion><artifactId>commons-codec</artifactId><groupId>commons-codec</groupId></exclusion><exclusion><artifactId>activation</artifactId><groupId>javax.activation</groupId></exclusion></exclusions></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency><!--阿里云邮件 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dm</artifactId><version>3.1.0</version></dependency><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency>

2.推送方法工具类封装

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.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.jointech.pushserver.constants.AlibabaConstants;
import lombok.extern.slf4j.Slf4j;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;/*** 阿里服务方法封装* @author lenny*/
@Slf4j
public class AlibabaUtil {/*** 邮件发送* @param toAddress 接收邮箱地址* @param fromAlias 发送邮箱名称* @param htmlBody 邮箱内容消息体* @param subject 邮箱主题* @return* @throws ClientException*/public static SingleSendMailResponse sendEmail(String toAddress, String fromAlias, String htmlBody, String subject) {try {if (fromAlias == null || fromAlias.length() <= 0) {fromAlias = AlibabaConstants.ALI_EMAIL_CN_FROM_ALIAS;}IClientProfile profile = DefaultProfile.getProfile(AlibabaConstants.ALI_EMAIL_REGION_ID, AlibabaConstants.ALI_EMAIL_ACCESS_KEY_ID, AlibabaConstants.ALI_EMAIL_SECRET);IAcsClient client = new DefaultAcsClient(profile);SingleSendMailRequest request = new SingleSendMailRequest();request.setAccountName(AlibabaConstants.ALI_EMAIL_ACCOUNT_NAME);request.setFromAlias(fromAlias);request.setAddressType(1);request.setToAddress(toAddress);request.setReplyToAddress(true);//可以给多个收件人发送邮件,收件人之间用逗号分开request.setSubject(subject);//如果采用byte[].toString的方式的话请确保最终转换成utf-8的格式再放入htmlbody和textbody,若编码不一致则会被当成垃圾邮件。//注意:文本邮件的大小限制为3M,过大的文本会导致连接超时或413错误request.setHtmlBody(htmlBody);//若textBody、htmlBody或content的大小不确定,建议采用POST方式提交,避免出现uri is not valid异常request.setMethod(MethodType.POST);SingleSendMailResponse sendMailResponse = client.getAcsResponse(request);log.info("邮件发送失败:给邮箱为{},发送的内容为{},主题为{}", toAddress, htmlBody, subject);return sendMailResponse;}catch (Exception e) {log.error(e.getMessage());return null;}}/*** 给指定的手机号发送短信* @param phone 电话号码* @param signName 签名* @param templateCode 模板编码* @param content 发送内容* @return* @throws ClientException*/public static SendSmsResponse sendSms(String phone, String signName, String templateCode, String content) {try {/* 超时时间,可自主调整 */System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");/* 初始化acsClient,暂不支持region化 */IClientProfile profile = DefaultProfile.getProfile(AlibabaConstants.ALI_SMS_REGION_ID, AlibabaConstants.ALI_SMS_ACCESS_KEY_ID, AlibabaConstants.ALI_SMS_SECRET);DefaultProfile.addEndpoint(AlibabaConstants.ALI_SMS_REGION_ID, AlibabaConstants.ALI_SMS_PRODUCT, AlibabaConstants.ALI_SMS_DOMAIN);IAcsClient acsClient = new DefaultAcsClient(profile);/* 组装请求对象-具体描述见控制台-文档部分内容 */SendSmsRequest request = new SendSmsRequest();/* 必填:待发送手机号 */request.setPhoneNumbers(phone);/* 必填:短信签名-可在短信控制台中找到 */request.setSignName(signName);/* 必填:短信模板code-可在短信控制台中找到 */request.setTemplateCode(templateCode);/* 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为 */request.setTemplateParam(content);// hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {log.info("短信发送成功:给号码为{},发送的内容为{}", phone, content);} else {log.info("短信发送失败:给号码为{},发送的内容为{}", phone, content);}return sendSmsResponse;}catch (Exception e) {log.error(e.getMessage());return null;}}/*** 发送SMTP邮件,含附件* @param toAddress* @param fromAlias* @param subject* @param bodyContent* @param attachPath* @return*/public static boolean sendSMTPEmail(String toAddress,String fromAlias,String subject,String bodyContent,String attachPath){try {if (fromAlias == null || fromAlias.length() <= 0) {fromAlias = AlibabaConstants.ALI_EMAIL_CN_FROM_ALIAS;}Properties props = System.getProperties();props.setProperty("mail.smtp.host", AlibabaConstants.ALI_SMTP_HOST);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.port", String.valueOf(AlibabaConstants.ALI_SMTP_PORT));props.setProperty("mail.smtp.socketFactory.port", String.valueOf(AlibabaConstants.ALI_SMTP_SSL_PORT));props.setProperty("mail.smtp.auth", "true");//建立邮件会话Session session = Session.getDefaultInstance(props, new Authenticator() {//身份认证@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(AlibabaConstants.ALI_EMAIL_ACCOUNT_NAME, AlibabaConstants.ALI_SMTP_PASSWORD);}});//建立邮件对象MimeMessage message = new MimeMessage(session);//设置邮件的发件人message.setFrom(new InternetAddress(AlibabaConstants.ALI_EMAIL_ACCOUNT_NAME,fromAlias));//收件人message.setRecipients(Message.RecipientType.TO, toAddress);//主题message.setSubject(subject);//内容Multipart multipart = new MimeMultipart();//body部分BodyPart contentPart = new MimeBodyPart();contentPart.setContent(bodyContent, "text/html;charset=utf-8");multipart.addBodyPart(contentPart);//附件部分BodyPart attachPart = new MimeBodyPart();FileDataSource fileDataSource = new FileDataSource(attachPath);attachPart.setDataHandler(new DataHandler(fileDataSource));attachPart.setFileName(MimeUtility.encodeText(fileDataSource.getName()));multipart.addBodyPart(attachPart);message.setContent(multipart);//发送邮件Transport.send(message);return true;} catch (Exception e) {log.error(e.toString());return false;}}
}

3.常量定义

/*** 阿里服务常量* @author lenny* @date 20210710*/
public class AlibabaConstants {private AlibabaConstants() {}/*** 阿里邮件发送账户*/public static final String ALI_EMAIL_ACCOUNT_NAME = "xxxxx.xxxxxx.com";/*** 阿里邮件发送人名称*/public static final String ALI_EMAIL_CN_FROM_ALIAS="xxx";/*** 阿里邮件发送人名称*/public static final String ALI_EMAIL_EN_FROM_ALIAS = "xxx";/***阿里邮件地区标识*/public static final String ALI_EMAIL_REGION_ID = "cn-hangzhou";/*** 阿里邮件验证账户*/public static final String ALI_EMAIL_ACCESS_KEY_ID = "xxx";/***阿里邮件密钥*/public static final String ALI_EMAIL_SECRET = "xxx";/*** 阿里邮件主题(中文)*/public static final String ALI_EMAIL_CN_SUBJECT="【邮件提醒】";/*** 阿里邮件主题(英文)*/public static final String ALI_EMAIL_EN_SUBJECT="[Email reminder]";/*** 阿里短信API产品名称*/public static final String ALI_SMS_PRODUCT = "Dysmsapi";/*** 阿里短信API产品域名*/public static final String ALI_SMS_DOMAIN = "dysmsapi.aliyuncs.com";/*** 阿里短信地区标识*/public static final String ALI_SMS_REGION_ID = "cn-hangzhou";/*** 阿里短信验证账户*/public static final String ALI_SMS_ACCESS_KEY_ID = "xxx";/*** 阿里短信密钥*/public static final String ALI_SMS_SECRET = "xxxxxx";/*** 阿里短信签名(中文)*/public static final String ALI_SMS_CN_SIGN_NAME="xxx";/*** 阿里短信签名(英文)*/public static final String ALI_SMS_EN_SIGN_NAME="xxx";/*** 阿里短信模板(中文)*/public static final String ALI_SMS_CN_MESSAGE_TEMPLATE="SMS_xxxxxx";/*** 阿里短信模板(英文)*/public static final String ALI_SMS_EN_MESSAGE_TEMPLATE="SMS_xxxxxx";/*** 阿里短信模板(推送微信服务号订阅信息)*/public static final String ALI_SMS_CN_SUBSCRIPTION_TEMPLATE="SMS_xxxxx";/*** 阿里SMTP邮件域名*/public static final String ALI_SMTP_HOST = "smtpdm.aliyun.com";/*** 阿里SMTP邮件端口*/public static final int ALI_SMTP_PORT = 80;/*** 阿里SMTP邮件SSL端口*/public static final int ALI_SMTP_SSL_PORT = 465;/*** 阿里SMTP邮件用户名*/public static final String ALI_SMTP_USER = "xxxx";/*** 阿里SMTP邮件密码*/public static final String ALI_SMTP_PASSWORD = "xxxxxxx";/*** SMTP邮件内容(中文)*/public static final String ALI_SMTP_CN_CONTENT="报告已送达,请查阅附件!";/*** SMTP邮件内容(英文)*/public static final String ALI_SMTP_EN_CONTENT="The report has been delivered, please refer to the attachment!";
}

4.方法调用

在调用的时候直接使用

    /*** 发送邮件* @param toAddress 接收人邮件地址* @param fromAlias 发送邮箱名称* @param htmlBody 消息体内容(用html格式发送效果更好)* @param subject 主题名称*/AlibabaUtil.sendEmail(toAddress,fromAlias,htmlBody,subject);/*** 发送短信* @param phone 接收人手机号* @param signName 短信签名* @param templateCode 短信模板* @param content 符合模板的短信内容参数*/AlibabaUtil.sendSms(phone,signName,templateCode,content);/*** smtp发送带附件的邮件* @param toAddress 接收人邮件地址* @param fromAlias 发送邮箱名称* @param subject 主题名称* @param bodyContent 邮件内容* @param filePath 邮件附件地址 */AlibabaUtil.sendSMTPEmail(toAddress, fromAlias, subject, bodyContent, filePath);

5.效果截图

短信报警:

 普通邮件报警:

SMTP附件邮件

Java SpringBoot集成阿里云短信与邮件服务相关推荐

  1. SpringBoot集成阿里云短信服务

    SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...

  2. springboot集成阿里云短信服务,实现发送短信功能

    springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...

  3. SpringBoot集成阿里云短信服务实现登录注册(超详细)

    本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...

  4. java springBoot 对接阿里云短信

    文章目录 前言 一.阿里云短信服务? 二.使用步骤 1.引入库 2.配置yml文件 3.代码调用过程 总结 前言 因项目需要,使用阿里云短信服务 . 提示:以下是本篇文章正文内容,下面案例可供参考 一 ...

  5. springboot集成阿里云短信验证码

    1.添加pom.xml依赖 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-ja ...

  6. Java常用工具类-发短信(集成阿里云短信服务)

    1.注册阿里账号并开通短信服务 注册阿里账号后,并进行个人或企业实名认证,实名认证后,才能开通短信服务. 界面如下: 2.获取AccessKey 参考获取AccessKey方法 创建成功后,如下图: ...

  7. SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)

    前言 网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的 所以,基于这一点. 该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程 ...

  8. Springboot整合阿里云短信服务

    目录 一.阿里云短信配置 1.开通短信服务​ 2. 申请模板 3.申请签名 二.springboot中集成阿里云短信服务 0.pom中引入依赖 1.配置application.properties 2 ...

  9. springboot 使用shiro集成阿里云短信验证码

    目录 1.阿里云短信验证码服务 2.发送短信验证码 3.shiro配置多个realm 4.验证短信验证码 5.一些修改思路 引言:短信验证码是通过发送验证码到手机的一种有效的验证码系统,主要用于验证用 ...

最新文章

  1. Dockerfile ENV和ARG的区别与应用
  2. 创建ContentProvider的详细步骤
  3. C语言基本数据结构之五(折半插入,堆排序,冒泡排序,快速排序,并归排序)
  4. python读取数据库导出文件_Python 获取 datax 执行结果保存到数据库的方法
  5. java触发full gc的几种情况概述
  6. 有一个能够统一的方式来画uml图的软件
  7. 大数据服务,至少有四点还值得存疑
  8. 攻击性Web测试框架(OWTF)是OWASP + PTES的重点,旨在联合优秀的工具使渗透测试更加高效,主要由Python编写
  9. vscode文件管理只有文件夹的时候也层级显示
  10. Sub-Gaussian随机变量
  11. 杭州-SQL杭州国迈软件有限公司笔试题
  12. (商品评价页)商品星级评分html+css+js
  13. 其他:鼠标滚轴坏了如何修?
  14. 趣图:深度学习之大炮打蚊子
  15. android是硬件还是软件,浅谈Android软硬件巧妙整合的开发技巧
  16. python第六章答案_python第六章
  17. HCNA安全学习笔记
  18. 管理运筹学软件计算机解咋看,管理运筹学-线性规划的计算机求解ppt课件.ppt
  19. 分布式存储与分布式计算
  20. 【Web前端】CSS使用方法

热门文章

  1. Mac电脑快速安装apt-get
  2. 计算机如何管理应用,电脑怎么管理iPhone手机应用
  3. 6.0系统设备Root激活Xposed框架教程
  4. <!DOCTYPE html>作用
  5. python爬虫之爬取起点中文原创小说排行榜
  6. Pots --bfs
  7. 软件工程毕业设计题目100例
  8. Mac搭建Hexo博客流程记录
  9. win10+1050ti+CUDA9.0+cudnn9.0的tensorflow-gpu环境搭建
  10. Vue3.0 状态管理库Pinia的前世今生