閱讀787 返回首頁    go 技術社區[雲棲]


異步獲取郵件推送結果

郵件推送服務提供了事件通知功能(可在其控製台上打開異步通知功能),支持將郵件推送的結果以消息的方式異步通知給用戶。用戶可以通過創建事件通知的規則,來指定在郵件推送過程中觸發不同的事件時,將郵件推送的結果消息推送到對應的接收端中。

可以解決的問題:

  • 異步獲取郵件推送的結果,再根據業務需求進行相應的處理,比如重新發送等等
  • 對於大批量的郵件通知的場景,可異步統計推送情況
  • 可以自動處理結果消息,對推送情況進行監控,比如發生突發的大量郵件推送失敗,可以第一時間知曉
  • 結果消息可以通過多種方式推送到不同的接收端(可能有多個業務部門均關心該數據),以進行不同的統計處理
  • 如果A將推送的權限授予B,A可以通過該方式來知曉B推送短信的情況

示意圖:

dm-en-archi

(一)事件通知規則組成

事件通知規則由兩部分組成:

  • 事件類型
  • 消息接收終端

(1)事件類型

事件通知是按區域提供服務的,在創建規則時,關注某個(些)事件就是指關心這個區域的郵件推送過程中產生的所有該類型事件。郵件推送的事件有如下兩種:

事件類型 描述
Deliver:SendSuccessfully 郵件推送成功
Deliver:SendFailed 郵件推送失敗

(2)消息接收終端
創建規則時,消息的接收終端可以有兩種設置方式:

  • 指定接收消息的Http服務或者MNS的隊列:此時係統會自動幫忙創建一個主題,並且以指定的Http服務或者MNS隊列作為Endpoint,創建相應的訂閱。(如果事先沒有主題,建議使用這種方式)
  • 直接指定主題:此時,規則匹配的話,消息就會發布到主題中(此時用戶可以選擇已有的主題,或者先創建主題,再選擇某個主題。)。然後用戶可以在該主題上創建訂閱,指定通過何種方式將消息推送到指定的接收端。注:

注:

事件通知規則指定消息接收端時,需要注意的是,。即,如果選擇了“主題”,那隻能繼續選擇“主題”;如果選擇了“非主題”的終端,那隻能選擇“非主題”的終端。

補充:

  • 消息通知是基於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&region=$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&region=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&region=cn-hangzhou&err_code=550&err_msg=550 No Such User

(三)注意事項:

  • 事件通知規則創建完,約10分鍾左右生效
  • 事件通知規則創建時,選擇“主題”,與選擇其他的接收終端是互斥的。即,如果選擇了“主題”,那隻能繼續選擇“主題”;如果選擇了“非主題”的終端,那隻能選擇非主題的終端。
  • 事件通知規則創建時,選擇“主題”作為終端時,隻能選擇一個。
  • 事件通知規則創建時,選擇“主題”作為終端時,不能選擇短信專用的主題(sms.xxx)。
  • 事件通知規則創建時,如果選擇“主題”作為接收終端時,用戶需要自己去創建對應的訂閱,定義自己的推送(消費)方式。
  • 事件通知規則創建時,如果選擇“非主題”作為接收終端時,會自動創建主題和對應的訂閱。
  • 事件通知規則支持創建和刪除,暫時不支持修改

(四)操作方式

(1)創建事件通知規則

(1.1)進入事件通知頁

create-1

(1.2)選擇主題作為接收終端

create-2

(1.3)選擇“非主題”作為接收終端

create-3

(2)查看事件通知規則

(2.1)事件通知規則列表

list-1

(3)接收異步通知消息(隊列)

推送郵件後,可以根據對應事件規則中的描述,在指定的消息接收終端查看到結果消息。比如創建規則時,指定將消息發送到隊列中,那就可以在控製台中,直接到對應的隊列中查詢消息內容;如果是指定發送到用戶的HTTP服務器上,用戶的HTTP服務器會收到具體的推送消息(可參考:說明SDK示例)。

(3.1)如果創建規則時,選擇的是主題,需要自行去創建訂閱以及隊列(已經有對應的訂閱和隊列的話,則跳過這兩步)

(3.1.1)創建隊列

(3.1.1.1)進入隊列標簽頁

create-queue-1

(3.1.1.2)創建隊列

create-queue-2

(3.1.2)創建主題

(3.1.2.1)進入主題標簽頁

create-topic-1

(3.1.2.2)創建主題

create-topic-2

(3.1.3)創建訂閱

(3.1.3.1)進入主題標簽頁

create-sub-1

(3.1.3.2)進入訂閱標簽頁

create-sub-2

(3.1.3.3)創建訂閱

create-sub-3

(3.2)如果創建規則時,選擇的是隊列,則隻需要自行創建隊列即可(已有對應的隊列,則跳過該步驟)

(3.2.1)進入隊列標簽頁

create-queue-1

(3.2.2)創建隊列

create-queue-2

(3.3)從隊列中接收消息

(3.3.1)進入隊列標簽頁

receive-1

(3.3.2)接收消息

receive-2

補充說明:使用SDK從對應Queue中接收異步回調結果消息的示例代碼可參考:

最後更新:2017-04-26 20:00:17

  上一篇:go 預定義__cplusplus宏
  下一篇:go postgresql中user表