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格式的我使用配置类没有读取成功:

#短信服务 accessKeyId
msn.accessKeyId=accessKeyId

#短信服务 accessKeySecret
msn.accessKeySecret=accessKeySecret

#短信服务 产品名称:云通信短信API产品,开发者无需替换
msn.product=Dysmsapi

#短信服务 发送短信的域名
msn.domain=dysmsapi.aliyuncs.com

#短信服务 区域Id
msn.regionId=cn-hangzhou

#短信服务 签名
msn.signName=阿里云短信签名(最好将短信签名写进代码里,否则会出现程序读取短信签名时乱码,导致读取失败,从而无法发送短信)

#短信服务 模板
msn.templateCode=阿里云短信模板

#短信服务 模板参数
msn.templateParam=code

#短信服务 发送日期 支持30天内记录查询,格式yyyyMMdd
msn.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.springframework.stereotype.Component;

@Component
@PropertySource("classpath:msn.properties")
@ConfigurationProperties(prefix = "msn")
@Data
public 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("dysmsapi.aliyuncs.com");
    request.setVersion("2017-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、将邮件推送服务使用的配置写入到配置文件中:

#邮件服务 accessKeyId
mail.accessKeyId=

#邮件服务 accessKeySecret
mail.accessKeySecret=

#邮件服务 发信地址
mail.accountName=

#邮件服务 区域Id
mail.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.springframework.stereotype.Component;

@Component
@PropertySource("classpath:mail.properties")
@ConfigurationProperties(prefix = "mail")
@Data
public 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-1.aliyuncs.com", "ap-southeast-1", "Dm",  "dm.ap-southeast-1.aliyuncs.com");
    //} catch (ClientException e) {
    //e.printStackTrace();
    //}
    IAcsClient client = new DefaultAcsClient(profile);
    SingleSendMailRequest request = new SingleSendMailRequest();
    try {
        //request.setVersion("2017-06-22");// 如果是除杭州region外的其它region(如新加坡region),必须指定为2017-06-22
        request.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、发送邮件:返回结果若出现此结果,则表示发送成功,可查看邮件。

三、总结:

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

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值