消息服务MNS的主题支持邮件推送,即发送到主题里的消息可以同时被阿里云邮件推送服务推送到邮箱。本文介绍在控制台上将消息推送至邮箱的具体步骤,并提供相应示例代码。
前提条件
您已完成以下操作:
- 注册阿里云账号。详情请参见阿里云账号注册流程。
- 开通MNS服务。详情请参见开通MNS服务。
- 开通邮件推送服务。详情请参见邮件推送。
- 设置发信域名。详情请参见设置发信域名。
- 设置发信地址。详情请参见设置发信地址。
注意 不支持动态设置回信地址。
创建主题
使用消息服务MNS创建一个主题,在以下的示例中命名为MyTopic。
- 登录MNS控制台。
- 在顶部菜单栏,选择地域。
- 在左侧导航栏,单击主题。
- 在主题页面的右上角,单击创建主题。
- 在创建主题对话框,输入主题名称,输入消息最大长度,然后单击确定。
创建邮件推送订阅
- 在主题页面,找到MyTopic主题,在其操作列单击订阅详情。
- 在展开区域的右上角,单击创建订阅。
- 在弹出的创建订阅对话框中,执行以下操作,然后单击确定。
- 推送类型:选择邮箱。
- 订阅名称:输入订阅的名称。
- 接收端地址:输入邮箱地址。
- 消息过滤标签:输入标签用于消息过滤。
- 重试策略:选择重试策略,决定向接收端推送消息时的重试策略。
- 消息推送格式:选择消息推送格式,默认格式为SIMPLIFIED。
发布消息
- 在主题页面,找到MyTopic,在其右侧操作列单击发布消息。
- 在发布消息页面,执行以下操作,然后单击发布消息。
- 消息内容:输入待发布消息的正文。
- 推送类型:选中邮箱。
- 在邮箱推送设置对话框中,执行以下操作,然后单击确定。
- 邮件主题:输入邮件的主题信息。
- 发信地址:输入您在邮件推送服务中配置的发信地址。
- 回信地址:打开后用户回信发送到您在邮件推送服务中配置的回信地址(状态必须是验证通过)。
- 地址类型:选择发信账号类型。
- 是否HTML正文:打开后邮件正文为HTML格式。
示例代码
此外,您也可以通过SDK将消息推送至邮箱。下文以Java SDK为例说明。
Endpoint格式为mail:directmail:XXX@YYY.com,其中XXX@YYY.com是您的邮箱地址。
- Java SDK订阅代码示例 :
CloudAccount cloudAccount = new CloudAccount(ACCESS_ID, ACCESS_KEY, ENDPOINT); MNSClient client = cloudAccount.getMNSClient(); CloudTopic topic = null; try { // 1. 创建主题。 String topicName = "TOPICNAME"; TopicMeta meta = new TopicMeta(); meta.setTopicName(topicName); topic = client.createTopic(meta); // 2. 设置邮箱Endpoint。 String mailEndpoint = topic.generateMailEndpoint("mymailbox@alibaba-inc.com"); // 3. 创建订阅。 SubscriptionMeta subMeta = new SubscriptionMeta(); subMeta.setSubscriptionName(SUBNAME); subMeta.setEndpoint(mailEndpoint); topic.subscribe(subMeta); // 4. 发布消息。 RawTopicMessage msg = new RawTopicMessage(); msg.setMessageBody("hello topic"); // 设置邮箱属性。 MessageAttributes messageAttributes = new MessageAttributes(); MailAttributes mailAttributes = new MailAttributes(); mailAttributes.setAccountName("direct_mail_account_name@aliyun-inc.com"); mailAttributes.setSubject("TestMailSubject"); messageAttributes.setMailAttributes(mailAttributes); TopicMessage msg2 = topic.publishMessage(msg, messageAttributes); System.out.println(msg2.getMessageId()); System.out.println(msg2.getMessageBodyMD5()); } catch (ServiceException se) { System.out.println(se.getErrorCode() + se.getRequestId()); System.out.println(se.getMessage()); se.printStackTrace(); } catch (Exception e) { e.printStackTrace();
- HTTP Request Body示例:
POST /topics/$TopicName/messages HTTP/1.1 Host: $AccountId.mns.cn-hangzhou.aliyuncs.com Date: Tue, 08 Dec 2015 06:13:40 GMT Content-Length:500 Content-Type:text/xml;charset=utf-8 Authorization: MNS 15B4D3461F177624206A:aibzWu1iDEx9LwO56+kHgA3eqmI= x-mns-version: 2015-06-06 <?xml version="1.0" encoding="UTF-8"?> <Message xmlns="http://mns.aliyuncs.com/doc/v1"> <MessageBody>hello topic</MessageBody> <MessageAttributes> <DirectMail>{"Subject":"TestMailSubject","AccountName":"direct_mail_account_name@aliyun-inc.com","ReplyToAddress":0,"AddressType":0,"IsHtml":0}</DirectMail> </MessageAttributes> </Message>
在文档使用中是否遇到以下问题
更多建议
匿名提交