300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > springboot开发基于阿里云的短信服务 邮件推送服务

springboot开发基于阿里云的短信服务 邮件推送服务

时间:2021-11-21 16:56:14

相关推荐

springboot开发基于阿里云的短信服务 邮件推送服务

短信服务以及邮件推送服务使用的都是阿里云的产品,短信服务是收费的,所以需要选择短信服务的套餐并预充值才能使用。邮件推送服务是有200条的免费额度。

一:短信服务

1、申请短信签名、短信模板

到阿里云的短信服务控制台,国内消息:签名管理中申请短信签名,模板管理中申请短信模板。

2、申请accessKeyId和accessKeySecret:

①:到RAM访问控制,人员管理,用户,新建用户

2、在新建用户里,填入登录名称以及显示名称,并勾选编程访问,至此短信服务的准备工作就完了。

附:还需要加入短信API使用的权限

3、在spring boot的pom.xml中加入阿里云短信服务的依赖,并加入JSON的依赖

<!-- 阿里云服务依赖 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version></dependency><!-- 阿里云短信服务依赖 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.1.0</version></dependency>

<!-- 阿里云JSON --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.31</version></dependency>

4、将申请好的短信服务的短信签名、短信模板、accessKeyId、accessKeySecret等放到配置文件中,最好使用.properties格式的,yml格式的我使用配置类没有读取成功:

#短信服务 accessKeyIdmsn.accessKeyId=accessKeyId#短信服务 accessKeySecretmsn.accessKeySecret=accessKeySecret#短信服务 产品名称:云通信短信API产品,开发者无需替换msn.product=Dysmsapi#短信服务 发送短信的域名msn.domain=#短信服务 区域Idmsn.regionId=cn-hangzhou#短信服务 签名msn.signName=阿里云短信签名(最好将短信签名写进代码里,否则会出现程序读取短信签名时乱码,导致读取失败,从而无法发送短信)#短信服务 模板msn.templateCode=阿里云短信模板#短信服务 模板参数msn.templateParam=code#短信服务 发送日期 支持30天内记录查询,格式yyyyMMddmsn.dateFormat=yyyyMMdd#短信服务 服务节点msn.endpointName=cn-hangzhou

5、使用配置类读取配置文件中的短信配置:

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.PropertySource;import org.ponent;@Component@PropertySource("classpath:msn.properties")@ConfigurationProperties(prefix = "msn")@Datapublic class MsnConfig {/*** accessKeyId*/private String accessKeyId;/*** accessKeySecret*/private String accessKeySecret;/***产品名称:云通信短信API产品,开发者无需替换*/private String product;/***发送短信的域名*/private String domain;/***区域Id*/private String regionId;/***签名*/private String signName;/***模板*/private String templateCode;/***模板参数*/private String templateParam;/***发送日期 支持30天内记录查询,格式yyyyMMdd*/private String dateFormat;/***服务节点*/private String endpointName;}

6、短信服务核心代码:

@GetMapping("/msn")public String sendMsn() {//短信发送结果String result = "";String regionId = msnConfig.getRegionId();String accessKeyId = msnConfig.getAccessKeyId();String accessSecret = msnConfig.getAccessKeySecret();String signName = msnConfig.getSignName();System.out.println("显示signName:"+signName);String templateCode = msnConfig.getTemplateCode();String templateParam = msnConfig.getTemplateParam();Map<String,String> map = new HashMap<>();//随机生成六位验证码String verifyCode = String.valueOf((Math.random()*9+1)*100000).substring(0,6);map.put(templateParam,verifyCode);String code = JSON.toJSONString(map);DefaultProfile profile = DefaultProfile.getProfile(regionId,accessKeyId,accessSecret);IAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setMethod(MethodType.POST);request.setDomain("");request.setVersion("-05-25");request.setAction("SendSms");request.putQueryParameter("RegionId", regionId);request.putQueryParameter("PhoneNumbers", "手机号码");request.putQueryParameter("SignName", "短信签名");request.putQueryParameter("TemplateCode", templateCode);request.putQueryParameter("TemplateParam",code);try {CommonResponse response = client.getCommonResponse(request);result = response.getData();System.out.println();} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return result;}

读取配置类中的短信签名时会出现乱码:

7、测试:

此结果表示短信发送成功,短信服务开发完成。

二、邮件推送服务:

开发邮件服务需要有持有域名才行,由于本文讲的是邮件推送服务,对于如何购买域名等问题请自行解决。

1、在邮件服务-邮件设置-发信域名:新建发信域名(此为示例)

2、发信配置:

3、到域名提供商处添加相应的配置。

4、发信地址设置:

5、设置邮件标签

6、到RAM访问控制台新建邮件发送的用户,步骤与开发短信服务时的操作一致,故不再赘述。,但也需要加邮件推送API使用的权限,至此邮件推送的准备工作已完毕。

7、在pom.xml中加入阿里云邮件推送使用的依赖

<!-- 阿里云服务依赖 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version></dependency><!-- 阿里云邮箱服务依赖 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dm</artifactId><version>3.1.0</version></dependency><!-- 阿里云JSON --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.31</version></dependency>

8、将邮件推送服务使用的配置写入到配置文件中:

#邮件服务 accessKeyIdmail.accessKeyId=#邮件服务 accessKeySecretmail.accessKeySecret=#邮件服务 发信地址mail.accountName=#邮件服务 区域Idmail.regionId=cn-hangzhou#邮件服务 发信人昵称#mail.sendPersonName=(程序无法正常读取中文,若是中文应写到程序中)#邮件服务 取值范围 0~1: 0 为随机账号;1 为发信地址mail.addressType=1#邮件服务 控制台创建的标签mail.tagName=#邮件服务 回信地址mail.replyToAddress=true#邮件服务 目标地址mail.toAddress=邮件接收人的邮箱

9、配置类读取邮件推送配置

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.PropertySource;import org.ponent;@Component@PropertySource("classpath:mail.properties")@ConfigurationProperties(prefix = "mail")@Datapublic class MailConfig {/*** accessKeyId*/private String accessKeyId;/*** accessKeySecret*/private String accessKeySecret;/*** 发信地址*/private String accountName;/***区域Id*/private String regionId;/***发信人昵称*/private String sendPersonName;/***发信地址代码 1*/private Integer addressType;/***控制台创建的标签*/private String tagName;/***回信地址*/private boolean replyToAddress;/***目标地址*/private String toAddress;}

10、邮件推送核心代码(此为示例):

@GetMapping("/mail")public String sample() {//邮件发送结果String result = "";// 如果是除杭州region外的其它region(如新加坡、澳洲Region),需要将下面的"cn-hangzhou"替换为"ap-southeast-1"、或"ap-southeast-2"。IClientProfile profile = DefaultProfile.getProfile(mailConfig.getRegionId(), mailConfig.getAccessKeyId(), mailConfig.getAccessKeySecret());// 如果是除杭州region外的其它region(如新加坡region), 需要做如下处理//try {//DefaultProfile.addEndpoint("dm.ap-southeast-", "ap-southeast-1", "Dm", "dm.ap-southeast-");//} catch (ClientException e) {//e.printStackTrace();//}IAcsClient client = new DefaultAcsClient(profile);SingleSendMailRequest request = new SingleSendMailRequest();try {//request.setVersion("-06-22");// 如果是除杭州region外的其它region(如新加坡region),必须指定为-06-22request.setAccountName(mailConfig.getAccountName());request.setFromAlias("发信人昵称");request.setAddressType(mailConfig.getAddressType());request.setTagName(mailConfig.getTagName());request.setReplyToAddress(true);request.setToAddress(mailConfig.getToAddress());//可以给多个收件人发送邮件,收件人之间用逗号分开,批量发信建议使用BatchSendMailRequest方式//request.setToAddress("邮箱1,邮箱2");request.setSubject("尊敬的用户您好:");//随机生成六位验证码String verifyCode = String.valueOf((Math.random()*9+1)*100000).substring(0,6);request.setHtmlBody("此邮件为开发邮件功能的测试邮件,验证码为:"+verifyCode);//开启需要备案,0关闭,1开启//request.setClickTrace("0");//如果调用成功,正常返回httpResponse;如果调用失败则抛出异常,需要在异常中捕获错误异常码;错误异常码请参考对应的API文档;SingleSendMailResponse httpResponse = client.getAcsResponse(request);result = httpResponse.getEnvId() + " "+httpResponse.getRequestId();} catch (ServerException e) {//捕获错误异常码System.out.println("ErrCode : " + e.getErrCode());e.printStackTrace();}catch (ClientException e) {//捕获错误异常码System.out.println("ErrCode : " + e.getErrCode());e.printStackTrace();}return result;}

11、发送邮件:返回结果若出现此结果,则表示发送成功,可查看邮件。

三、总结:

使用阿里云的短信服务、邮件推送服务开发短信通知及邮件通知功能,过程并不复杂,可把发送的验证码存储到数据库或缓存中,用来进行注册或登陆验证。

​​​​​​​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。