787
技術社區[雲棲]
異步獲取郵件推送結果
郵件推送服務提供了事件通知功能(可在其控製台上打開異步通知功能),支持將郵件推送的結果以消息的方式異步通知給用戶。用戶可以通過創建事件通知的規則,來指定在郵件推送過程中觸發不同的事件時,將郵件推送的結果消息推送到對應的接收端中。
可以解決的問題:
- 異步獲取郵件推送的結果,再根據業務需求進行相應的處理,比如重新發送等等
- 對於大批量的郵件通知的場景,可異步統計推送情況
- 可以自動處理結果消息,對推送情況進行監控,比如發生突發的大量郵件推送失敗,可以第一時間知曉
- 結果消息可以通過多種方式推送到不同的接收端(可能有多個業務部門均關心該數據),以進行不同的統計處理
- 如果A將推送的權限授予B,A可以通過該方式來知曉B推送短信的情況
示意圖:
(一)事件通知規則組成
事件通知規則由兩部分組成:
- 事件類型
- 消息接收終端
(1)事件類型
事件通知是按區域提供服務的,在創建規則時,關注某個(些)事件就是指關心這個區域的郵件推送過程中產生的所有該類型事件。郵件推送的事件有如下兩種:
事件類型 | 描述 |
---|---|
Deliver:SendSuccessfully | 郵件推送成功 |
Deliver:SendFailed | 郵件推送失敗 |
(2)消息接收終端
創建規則時,消息的接收終端可以有兩種設置方式:
- 指定接收消息的Http服務或者MNS的隊列:此時係統會自動幫忙創建一個主題,並且以指定的Http服務或者MNS隊列作為Endpoint,創建相應的訂閱。(如果事先沒有主題,建議使用這種方式)
- 直接指定主題:此時,規則匹配的話,消息就會發布到主題中(此時用戶可以選擇已有的主題,或者先創建主題,再選擇某個主題。)。然後用戶可以在該主題上創建訂閱,指定通過何種方式將消息推送到指定的接收端。注:
注:
事件通知規則指定消息接收端時,需要注意的是,。即,如果選擇了“主題”,那隻能繼續選擇“主題”;如果選擇了“非主題”的終端,那隻能選擇“非主題”的終端。
補充:
(二)郵件推送異步通知消息
郵件推送的結果消息格式如下(包含如下字段):
字段名 | 描述 |
---|---|
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中接收異步回調結果消息的示例代碼可參考:
最後更新:2017-04-26 20:00:17