全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
消息服务

发布短信消息示例代码

更新时间:2017-06-30 14:31:57

本示例介绍了:如何发布短信消息。

1. 准备

  • 下载最新版java sdk,解压到aliyun-sdk-mns-samples文件夹;
  • 用Eclipse导入Maven工程,选中aliyun-sdk-mns-samples文件夹;
  • 在用户目录(Linux系统为”/home/YOURNAME/“目录或者Windows系统为 “C:\Users\YOURNAME”目录)中创建.aliyun-mns.properties文件,并填写服务地址、AccessKeyID和AccessKeySecret:
    • AccessKeyId、AccessKeySecret
    • Endpoint
      • 访问MNS的接入地址,登陆MNS控制台 单击右上角 获取Endpoint 查看;
      • 不同地域的接入地址不同,分为公网以及内网域名;

2. 创建主题和订阅

发布短信有两种模式的主题可使用(二者选其一即可):

  • 短信专用主题(推荐)
  • 普通主题

2.1 短信专用主题(推荐,简单)

进入控制台短信概览页,获取主题名称(专用主题和订阅会自动进行创建):

duanxin-gailan

注:图中 sms.topic-cn-hangzhou 即杭州区域的短信专用主题,不同区域对应的主题名不一样(使用时需要注意主题名与选择的Endpoint的一致性)。

2.2 普通主题及订阅(若使用短信专用主题则跳过)

使用普通的主题的话,需要分别创建主题和对应的订阅。

(1)创建主题

注:目前仅华东1、华东2、华北1、华北2、华南1支持短信推送,创建主题必须选择这些区域。

进入控制台主题标签页

create-topic-1

create-topic-2

(2)创建短信推送订阅

create-sub-1

create-sub-2

create-sub-3

3. 发布短信消息

示例需要传入的参数包括:

  • $YourAccessId,阿里云AccessId,可在“步骤一”获取(登陆阿里云 AccessKey 管理页面创建、查看)
  • $YourAccessKey,阿里云AccessKey,可在“步骤一”获取(登陆阿里云 AccessKey 管理页面创建、查看)
  • $YourMNSEndpoint,访问MNS服务的接入地址,可在“步骤一”获取(登陆MNS控制台,单击右上角“获取Endpoint”查看,选择公网地址)
  • $YourTopic,发送短信使用的主题,可在“步骤二”获取,建议使用短信专用主题(进入控制台短信概览页,获取主题名称)
  • $YourSignName,发送短信使用的签名,可在here获取
  • $YourSMSTemplateCode,发送短信使用的模板Code,可在here获取
  • $YourSMSTemplateParamKey1,所指定短信模板中定义的参数名(“{}”中的内容),没有可不指定;可在here查看模板中的变量,注:key 和 value 都必须是字符串形式。duanmo-1duanmo-2
  • $YourReceiverPhoneNumber1,接收短信的手机号码

示例代码如下:

  1. public class BatchPublishSMSMessageDemo {
  2. public static void main(String[] args) {
  3. /**
  4. * Step 1. 获取主题引用
  5. */
  6. CloudAccount account = new CloudAccount("$YourAccessId", "$YourAccessKey", "$YourMNSEndpoint");
  7. MNSClient client = account.getMNSClient();
  8. CloudTopic topic = client.getTopicRef("$YourTopic");
  9. /**
  10. * Step 2. 设置SMS消息体(必须)
  11. *
  12. * 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
  13. */
  14. RawTopicMessage msg = new RawTopicMessage();
  15. msg.setMessageBody("sms-message");
  16. /**
  17. * Step 3. 生成SMS消息属性
  18. */
  19. MessageAttributes messageAttributes = new MessageAttributes();
  20. BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
  21. // 3.1 设置发送短信的签名(SMSSignName)
  22. batchSmsAttributes.setFreeSignName("$YourSignName");
  23. // 3.2 设置发送短信使用的模板(SMSTempateCode)
  24. batchSmsAttributes.setTemplateCode("$YourSMSTemplateCode");
  25. // 3.3 设置发送短信所使用的模板中参数对应的值(在短信模板中定义的,没有可以不用设置)
  26. BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
  27. smsReceiverParams.setParam("$YourSMSTemplateParamKey1", "$value1");
  28. smsReceiverParams.setParam("$YourSMSTemplateParamKey2", "$value2");
  29. // 3.4 增加接收短信的号码
  30. batchSmsAttributes.addSmsReceiver("$YourReceiverPhoneNumber1", smsReceiverParams);
  31. batchSmsAttributes.addSmsReceiver("$YourReceiverPhoneNumber2", smsReceiverParams);
  32. messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
  33. try {
  34. /**
  35. * Step 4. 发布SMS消息
  36. */
  37. TopicMessage ret = topic.publishMessage(msg, messageAttributes);
  38. System.out.println("MessageId: " + ret.getMessageId());
  39. System.out.println("MessageMD5: " + ret.getMessageBodyMD5());
  40. } catch (ServiceException se) {
  41. System.out.println(se.getErrorCode() + se.getRequestId());
  42. System.out.println(se.getMessage());
  43. se.printStackTrace();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. client.close();
  48. }
  49. }

4. 查看短信推送状态

查看短信推送状态的结果消息请参考:here

5. 如没有接收到短信怎么办

1)代码请用UTF8 格式,以避免中文字符出现问题。

2)每天发送短信条数是有限制的。参考流控文档

3)如果您提交接口请求后,未能收到短信,您可以通过事件通知来查看结果,包括请求接口错误和发送状态返回结果。

事件通知 接口报错信息 运营商返回报错信息

4)如还无法解决您的问题,您可以提交工单,并将messageid提供给我们。

本文导读目录