异步获取邮件推送结果
邮件推送服务提供了事件通知功能(可在其控制台上打开异步通知功能),支持将邮件推送的结果以消息的方式异步通知给用户。用户可以通过创建事件通知的规则,来指定在邮件推送过程中触发不同的事件时,将邮件推送的结果消息推送到对应的接收端中。
可以解决的问题:
- 异步获取邮件推送的结果,再根据业务需求进行相应的处理,比如重新发送等等
- 对于大批量的邮件通知的场景,可异步统计推送情况
- 可以自动处理结果消息,对推送情况进行监控,比如发生突发的大量邮件推送失败,可以第一时间知晓
- 结果消息可以通过多种方式推送到不同的接收端(可能有多个业务部门均关心该数据),以进行不同的统计处理
- 如果A将推送的权限授予B,A可以通过该方式来知晓B推送短信的情况
示意图:
(一)事件通知规则组成
事件通知规则由两部分组成:
- 事件类型
- 消息接收终端
(1)事件类型
事件通知是按区域提供服务的,在创建规则时,关注某个(些)事件就是指关心这个区域的邮件推送过程中产生的所有该类型事件。邮件推送的事件有如下两种:
事件类型 | 描述 |
---|---|
Deliver:SendSuccessfully | 邮件推送成功 |
Deliver:SendFailed | 邮件推送失败 |
(2)消息接收终端
创建规则时,消息的接收终端可以有两种设置方式:
- 指定接收消息的Http服务或者MNS的队列:此时系统会自动帮忙创建一个主题,并且以指定的Http服务或者MNS队列作为Endpoint,创建相应的订阅。(如果事先没有主题,建议使用这种方式)
直接指定主题:此时,规则匹配的话,消息就会发布到主题中(此时用户可以选择已有的主题,或者先创建主题,再选择某个主题。如果用户指定了不存在的主题,消息是没办法正常推送的)。然后用户可以在该主题上创建订阅,指定通过何种方式将消息推送到指定的接收端。注:
- 不要选择短信专用的主题(sms.xxx)作为消息接收端,短信专用Topic仅支持短信推送。
- 如果直接指定主题,只能指定一个。
注:
事件通知规则指定消息接收端时,需要注意的是,选择“主题”,与选择其他的接收终端是互斥的。即,如果选择了“主题”,那只能继续选择“主题”;如果选择了“非主题”的终端,那只能选择“非主题”的终端。
补充:
- 消息通知是基于MNS的主题实现的,支持多种推送方式,具体可参考:here。
- 接收消息的Http服务搭建可参考:说明,SDK示例。
- 从对应的队列中获取通知消息的方式可参考:here。
(二)邮件推送异步通知消息
邮件推送的结果消息格式如下(包含如下字段):
字段名 | 描述 |
---|---|
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®ion=$region&err_code=$err_code&err_msg=$err_msg
消息示例分别如下所示:
(1)发送成功:
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®ion=cn-hangzhou&err_code=250&err_msg=250 Send Mail OK
(2)发送失败
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®ion=cn-hangzhou&err_code=550&err_msg=550 No Such User
(三)注意事项:
- 事件通知规则创建完,约10分钟左右生效
- 事件通知规则创建时,选择“主题”,与选择其他的接收终端是互斥的。即,如果选择了“主题”,那只能继续选择“主题”;如果选择了“非主题”的终端,那只能选择非主题的终端。
- 事件通知规则创建时,选择“主题”作为终端时,只能选择一个。
- 事件通知规则创建时,选择“主题”作为终端时,不能选择短信专用的主题(sms.xxx)。
- 事件通知规则创建时,如果选择“主题”作为接收终端时,用户需要自己去创建对应的订阅,定义自己的推送(消费)方式。
- 事件通知规则创建时,如果选择“非主题”作为接收终端时,会自动创建主题和对应的订阅。
- 事件通知规则支持创建和删除,暂时不支持修改
(四)操作方式
(1)创建事件通知规则
(1.1)进入事件通知页
(1.2)选择主题作为接收终端
(1.3)选择“非主题”作为接收终端
(2)查看事件通知规则
(2.1)事件通知规则列表
(3)接收异步通知消息(队列)
推送邮件后,可以根据对应事件规则中的描述,在指定的消息接收终端查看到结果消息。比如创建规则时,指定将消息发送到队列中,那就可以在控制台中,直接到对应的队列中查询消息内容;如果是指定发送到用户的HTTP服务器上,用户的HTTP服务器会收到具体的推送消息(可参考:说明,SDK示例)。
(3.1)如果创建规则时,选择的是主题,需要自行去创建订阅以及队列(已经有对应的订阅和队列的话,则跳过这两步)
(3.1.1)创建队列
(3.1.1.1)进入队列标签页
(3.1.1.2)创建队列
(3.1.2)创建主题
(3.1.2.1)进入主题标签页
(3.1.2.2)创建主题
(3.1.3)创建订阅
(3.1.3.1)进入主题标签页
(3.1.3.2)进入订阅标签页
(3.1.3.3)创建订阅
(3.2)如果创建规则时,选择的是队列,则只需要自行创建队列即可(已有对应的队列,则跳过该步骤)
(3.2.1)进入队列标签页
(3.2.2)创建队列
(3.3)从队列中接收消息
(3.3.1)进入队列标签页
(3.3.2)接收消息
补充说明:使用SDK从对应Queue中接收异步回调结果消息的示例代码可参考:
- JavaSdk:here
- C++Sdk:here
- PythonSdk:here
- PhpSdk:here
- C#Sdk:here
- RestfulAPI:here
异步获取邮件推送结果相关推荐
- 用 Celery 实现邮件推送系统
2019独角兽企业重金招聘Python工程师标准>>> 系统需求 本文以Celery 实现分布式任务队列为基础,简述了一个邮件推送系统的模型. Celery 是 Distribute ...
- 利用SpringBoot+RabbitMQ,实现一个邮件推送服务
一.流程图 本文内容主要围绕这个流程图展开,利用 RabbitMQ 消息队列,实现生产者与消费者解耦,所以有必要先贴出来,涵盖了 RabbitMQ 很多知识点,如: 消息发送确认机制 消费确认机制 消 ...
- 使用阿里云邮件推送服务架设自己邮件验证与推送体系
提示:阅读本文需提前了解的相关知识 1.电子邮件协议(http://baike.baidu.com/view/2367542.htm) 2.阿里云邮件推送(https://www.aliyun.com ...
- YII2.0使用阿里云邮件推送实现邮件发送
从YII中文网小马哥发布的教程http://www.yiichina.com/tutorial/320获取到163邮箱的配置方法 1.在配置文件main-local.php components=&g ...
- 阿里云邮件推送接口对接
阿里云邮件推送接口对接 官方接口文档 PHP对接接口代码参考 官方接口文档 阿里云邮件推送 PHP对接接口代码参考 <?php /** @Author: kinra* @Date: 2021-0 ...
- RedMine项目管理系统邮件推送设置(Windows环境)
RedMine项目管理系统有邮箱推送功能,当Bug,安全漏洞等内容被修改.解决.评论的时候,系统会通过邮件 及时的通知你的团队和客户.邮件通知的环节.形式.时间.接受人均可定制,功能十分实用. 下面是 ...
- 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题
在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...
- mailgun ——10000封每月的邮件推送接口
近期接触了一两个接口,一个是twilio短信推送接口,另一个是mailgun的邮件推送接口. 两个网站都在国外,如果在国内直接注册的话会不成功,原因是需要人机验证. 需要科学上网才能弹出人机验证的小窗 ...
- 钉钉机器人关键词应答_Gmail 邮件推送到钉钉群机器人(详细)教程|国内接收 Gmail 邮件...
做这个功能费了我老大劲了,首先想到的还是利用现成的软件,尝试了一圈发现都不满意.然后不想重复造轮子,就搜索如何把 Gmail 推送到钉钉,结果只搜到了诸如 Python 如何调用 Gmail API. ...
最新文章
- C++中vector的使用
- 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史)
- GDCM:gdcm::Dict的测试程序
- LibreOJ #6207. 米缇(杜教筛 + 拉格朗日插值)
- Python Base64模块的使用
- iOS nav加角标
- solr dih mysql 注意事项
- python编程用户登陆c_python编写登录接口(上)
- 健康档案管理系统方案/案列/APP/软件/小程序
- 《别做“正常”的傻瓜(全新第2版)》
- 读书笔记-捌-《创业维艰》
- c语言课设雷霆战机编程,C语言写的雷霆战机
- MSDC 4.3 接口规范(28)
- 酷我CEO雷鸣:差异化服务是制胜关键
- 2020 12-23 视觉组作业
- 选择背光需要对比哪些因素呢?
- java 双重检查锁 失效_关于多线程:为什么Java中双重检查锁定被打破?
- 牛客BM99-顺时针旋转矩阵-C++
- 基于ARM Cortex-A8和Android 4.x的联动报警系统 (Android 、A8、Linux、驱动、NDK)
- jquery validation engine ajax验证,jQuery Validation Engine 表单验证