消息服务MNS的主题支持邮件推送,即发送到主题里的消息可以同时被阿里云邮件推送服务推送到邮箱。本文介绍在控制台上将消息推送至邮箱的具体步骤,并提供相应示例代码。

您已完成以下操作:
注意 不支持动态设置回信地址。

创建主题

使用消息服务MNS创建一个主题,在以下的示例中命名为MyTopic。

  1. 在控制台顶部菜单栏,选择对应地域(Region),如华东1(杭州)。
  2. 在左侧导航栏,单击主题。在主题页面的右上角,单击创建主题
  3. 创建主题对话框中填写主题属性,单击确认创建主题

创建邮件推送订阅

  1. 在控制台主题页面,找到MyTopic主题,并在其操作列单击订阅详情
  2. 在展开区域的右上角,单击创建订阅创建订阅
  3. 在弹出的创建订阅对话框中,填写相应字段,单击确认
    其中,推送类型选择为邮箱接收端地址输入框中输入邮箱地址。接收端

发布消息

  1. 主题页面,找到MyTopic并在其右侧操作列,单击发布消息
  2. 发布消息页面,执行以下操作:
    • 填写相关信息,推送类型选择为邮箱
    • 在弹出的邮箱推送设置对话框中,填写相应信息,单击确认邮箱推送
      参数说明如下:
      • 发信地址:填写您在邮件推送服务中配置的发信地址。
      • 回信地址:填写您在邮件推送服务中配置的回信地址(状态必须是验证通过)。
      • 地址类型:指定发信账号类型。
      • 是否HTML正文:邮件正文是否为HTML格式。
  3. 发送消息,并查收邮件。

示例代码

此外,您也可以通过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. first create the topic
        String topicName = "TOPICNAME";
        TopicMeta meta = new TopicMeta();
        meta.setTopicName(topicName);
        topic = client.createTopic(meta);
    
        // 2. generate the mail endpoint
        String mailEndpoint = topic.generateMailEndpoint("mymailbox@alibaba-inc.com");
    
        // 3. now subscribe to topic
        SubscriptionMeta subMeta = new SubscriptionMeta();
        subMeta.setSubscriptionName(SUBNAME);
        subMeta.setEndpoint(mailEndpoint);
    
        topic.subscribe(subMeta);
    
        // 4. publish message
        RawTopicMessage msg = new RawTopicMessage();
        msg.setMessageBody("hello topic");
    
        // 4.1 set the necessary attributes for mail
        MessageAttributes messageAttributes = new MessageAttributes();
        MailAttributes mailAttributes = new MailAttributes();
        mailAttributes.setAccountName("direct_mail_account_name@aliyun-inc.com");
        mailAttributes.setSubject("TestMailSubject");
        messageAttributes.setMailAttributes(mailAttributes);
    
        // 4.2 publish
        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>