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

发布短信消息示例代码

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

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

1. 准备

  1. 下载最新版csharp sdk,解压后将工程导入到VisualStudio;
  2. 工程里有4个项目,其中一个是AliyunSDK_MNS,这个就是SDK所在的项目。右击这个项目名,选择重新生成,可以在项目的bin目录下找到生成的Aliyun.MNS.dll

    2.1 其他几个项目里都需要引用这个生成的dll,请配置好其他几个项目的“引用”

  3. 在AliyunSDK_MNS_Sample这个项目里,有我们接下来会介绍的队列操作的Sample:SyncOperationSample.cs

    3.1 将AliyunSDK_MNS_Sample这个项目设置为启动项,并将SyncOperationSample设置为启动对象

    3.2 打开SyncOperationSample.cs文件,在文件的最上几行,配置AccessKeyID、AccessKeySecret和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. using Aliyun.MNS.Model;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. using System.Text;
  7. namespace Aliyun.MNS.Sample
  8. {
  9. class PublishBatchSMSMessageDemo
  10. {
  11. private const string _endpoint = "$YourMNSEndpoint"; // eg. http://1234567890123456.mns.cn-shenzhen.aliyuncs.com
  12. private const string _accessKeyId = "$YourAccessId";
  13. private const string _secretAccessKey = "$YourAccessKey";
  14. private const string _topicName = "$YourTopicName";
  15. static void Main(string[] args)
  16. {
  17. /**
  18. * Step 1. 初始化Client
  19. */
  20. IMNS client = new Aliyun.MNS.MNSClient(_accessKeyId, _secretAccessKey, _endpoint);
  21. /**
  22. * Step 2. 获取主题引用
  23. */
  24. Topic topic = client.GetNativeTopic(_topicName);
  25. /**
  26. * Step 3. 生成SMS消息属性
  27. */
  28. MessageAttributes messageAttributes = new MessageAttributes();
  29. BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
  30. // 3.1 设置发送短信的签名:SMSSignName
  31. batchSmsAttributes.FreeSignName = "$YourSMSSignName";
  32. // 3.2 设置发送短信的模板SMSTemplateCode
  33. batchSmsAttributes.TemplateCode = "$YourSMSTemplateCode";
  34. Dictionary<string, string> param = new Dictionary<string, string>();
  35. // 3.3 (如果短信模板中定义了参数)设置短信模板中的参数,发送短信时,会进行替换
  36. param.Add("$YourSMSTemplateParamKey1", "value1");
  37. // 3.4 设置短信接收者手机号码
  38. batchSmsAttributes.AddReceiver("$YourReceiverPhoneNumber1", param);
  39. batchSmsAttributes.AddReceiver("$YourReceiverPhoneNumber2", param);
  40. messageAttributes.BatchSmsAttributes = batchSmsAttributes;
  41. PublishMessageRequest request = new PublishMessageRequest();
  42. request.MessageAttributes = messageAttributes;
  43. /**
  44. * Step 4. 设置SMS消息体(必须)
  45. *
  46. * 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
  47. */
  48. request.MessageBody = "smsmessage";
  49. try
  50. {
  51. /**
  52. * Step 5. 发布SMS消息
  53. */
  54. PublishMessageResponse resp = topic.PublishMessage(request);
  55. Console.WriteLine(resp.MessageId);
  56. }
  57. catch (Exception ex)
  58. {
  59. Console.WriteLine("Publish SMS message failed, exception info: " + ex.Message);
  60. }
  61. }
  62. }
  63. }

4. 查看短信推送状态

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

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

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

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

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

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

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

本文导读目录