您可通过在MNS上创建事件通知规则,并且以消息的方式主动推送到指定的接收端,来关注邮件推送事件。本文介绍邮件推送事件通知的适用场景、使用需知、规则注意事项等信息,并举例说明邮件推送事件的具体使用方法。

邮件推送服务提供了事件通知功能(可在其控制台上打开异步通知功能),支持将邮件推送的结果以消息的方式异步通知给用户。用户可以通过创建事件通知的规则,来指定在邮件推送过程中触发不同的事件时,将邮件推送的结果消息推送到对应的接收端中。示意图如下所示。emailpushevent

适用场景

可以解决的问题:

  • 异步获取邮件推送的结果,再根据业务需求进行相应的处理,例如重新发送等等
  • 对于大批量的邮件通知的场景,可异步统计推送情况
  • 可以自动处理结果消息,对推送情况进行监控,例如发生突发的大量邮件推送失败,可以第一时间知晓
  • 结果消息可以通过多种方式推送到不同的接收端(可能有多个业务部门均关心该数据),以进行不同的统计处理
  • 如果A将推送的权限授予B,A可以通过该方式来知晓B推送短信的情况

事件规则

事件通知规则由两部分组成:

  • 事件类型

    事件通知是按地域提供服务的,在创建规则时,关注某个(些)事件就是指关心这个地域的邮件推送过程中产生的所有该类型事件。邮件推送的事件有以下两种:

    事件类型 描述
    Deliver:SendSuccessfully 邮件推送成功
    Deliver:SendFailed 邮件推送失败
  • 消息接收终端

    消息接收终端创建规则时,消息的接收终端有以下设置方式:

    • 指定接收消息的HTTP服务或者MNS的队列:此时系统会自动帮忙创建一个主题,并且以指定的HTTP服务或者MNS队列作为Endpoint,创建相应的订阅。如果事先没有主题,建议使用这种方式。
    • 直接指定主题:此时,规则匹配的话,消息就会发布到主题中。此时用户可以选择已有的主题,或者先创建主题,再选择某个主题。如果用户指定了不存在的主题,消息是没办法正常推送的。然后用户可以在该主题上创建订阅,指定通过何种方式将消息推送到指定的接收端。
      说明
      • 不要选择短信专用的主题(sms.xxx)作为消息接收端,短信专用主题仅支持短信推送。
      • 如果直接指定主题,只能指定一个。

在开始创建时间规则前,请务必阅读以下几点:

  • 事件通知规则只能由主账号创建。
  • 事件通知规则创建完,约10分钟左右生效。
  • 事件通知规则指定消息接收端时,如果选择主题,与选择其他的接收终端是互斥的。即如果选择了主题,那只能继续选择主题;如果选择了非主题的终端,那只能选择非主题的终端。
  • 事件通知规则创建时,如果选择主题作为接收终端时,用户需要自己去创建对应的订阅,定义自己的推送(消费)方式。
  • 事件通知规则创建时,如果选择非主题作为接收终端时,会自动创建主题和对应的订阅。
  • 事件通知规则支持创建和删除,暂时不支持修改。

邮件推送异步通知消息

邮件推送的结果消息格式包含以下字段。

字段名 描述
env_id 系统内ID(用于反馈查询问题)
msg_id 邮件原文中的Message-ID字段
account 发件人地址
from 发件人地址
rcpt 收件人地址
recv_time 邮件接收入队时间
end_time 邮件投递完成时间
status 投递完成结果状态(0-成功,2-无效地址,3-接收方认为垃圾邮件,4-失败)
event 触发的事件
region 时间规则所在地域
err_code 投递完成时接收方ESP返回码
err_msg 投递完成时接收方ESP返回信息

发送成功和发送失败时,消息中的字段都是一样的,格式如下:

env_id=$env_id&msg_id=$msg_id&account=$account&from=$from&rcpt=$rcpt&recv_time=$time&end_time=$time&status=$status&event=$event&region=$region&err_code=$err_code&err_msg=$err_msg           

错误说明

错误信息请参见邮件推送常见退信代码及处理方法。重点关注接收方常见退信代码。

此外,API级别的错误(MNS邮件订阅推送时出错)请参见:

消息示例

  • 发送成功
    env_id=457323378&msg_id=77041400535408&account=test@test.com&from=test@test.com&rcpt=abc@abc.com&recv_time=2017-04-14 11:44:47&end_time=2017-04-14 11:44:48&status=0&event=deliver&region=cn-hangzhou&err_code=250&err_msg=250 Send Mail OK          
  • 发送失败
    env_id=457323379&msg_id=77041400535409&account=test@test.com&from=test@test.com&rcpt=abc@abc.com&recv_time=2017-04-14 11:44:48&end_time=2017-04-14 11:44:49&status=2&event=deliver&region=cn-hangzhou&err_code=550&err_msg=550 No Such User           

操作步骤

  1. 登录MNS控制台,在顶部菜单栏,选择所需地域。
  2. 在左侧导航栏,单击事件通知
  3. 事件通知页面的右上角,单击创建规则
  4. 创建规则对话框,填写相关信息。
    • 如果接收终端选择的是http,则填写HTTP Endpoint即可。
    • 如果接收终端选择的是队列,请确保相应队列已创建。如未创建,具体步骤请参见队列控制台操作帮助
    • 如果接收终端选择的是主题,请确保相应主题、订阅资源已创建。如未创建,具体步骤请参见主题控制台操作帮助
  5. 单击确定
  6. 接收异步通知消息(队列为例)。

    推送邮件后,可以根据对应事件规则中的描述,在指定的消息接收终端查看到结果消息。例如创建规则时,指定将消息发送到队列中,那就可以在控制台中,直接到对应的队列中查询消息内容;如果是指定发送到用户的HTTP服务器上,用户的HTTP服务器会收到具体的推送消息。详情请参见主题使用手册HttpEndpoint)。

  7. 队列页面,找到接收终端指定的队列,在其操作列,单击接收消息
  8. 接收消息对话框中,清除Base64解码,即可查看到事件通知。

更多信息

使用SDK从对应队列中接收异步回调结果消息的示例代码可参见以下文档: