本文介紹郵件推送服務如何通過集成阿里云事件總線服務,實現郵件投遞結果的分發通知。
用戶成功進行事件總線相關配置后,通過郵件推送服務發送的郵件,其投遞結果將按照在事件總線中設置的事件分發規則,發送至指定的事件目標(輕量消息隊列、HTTP等),實現投遞結果的異步獲取。
下文將詳細介紹如何完成事件分發設置。
事件總線服務開通與訪問授權
1.在阿里云首頁搜索事件總線或 EventBridge,免費開通事件總線服務
創建事件規則
在控制臺-事件總線-云服務專用事件總線-創建規則,創建郵件推送服務的事件分發規則,配置基本信息,填寫規則名稱和描述;
配置事件模式,事件源類型為阿里云官方事件源,事件源選擇acs.dm
,事件類型目前支持發送失敗、發送成功、點擊鏈接、打開郵件,用戶可按需添加,未添加的事件類型會被過濾。
配置事件目標,選擇服務類型,這里以輕量消息隊列為例,指定發送到的目標隊列(輕量消息隊列服務的開通與隊列的創建請參考下文“開通輕量消息隊列并創建消息接收的隊列”章節),消息體默認選擇完整事件,不進行base64編碼,重試和死信選型可按需設置,設置完成后點擊創建規則。
規則創建完成后,可在事件總線概覽中進行查看。
事件類型和修改方式
目前支持的事件類型
投遞成功:Deliver:Success
投遞失敗:Deliver:Fail
打開郵件:Deliver:Open
點擊郵件中的鏈接:Deliver:Click
修改各類事件的統計
左側導航欄點擊事件規則-編輯事件模式-事件類型,可對事件類型進行修改。
打開或者點擊事件的統計的前提
如果需要對郵件的打開和點擊行為事件進行通知分發,前期是開啟數據跟蹤功能,詳細操作可參考如何開啟數據跟蹤功能?。
接收事件分發消息,驗證鏈路已通
以上文流程設置的事件目標輕量消息隊列為例,驗證事件分發鏈路。
開通輕量消息隊列并創建消息接收的隊列
進入輕量消息隊列控制臺,若未開通輕量消息隊列服務,則按引導先開通輕量消息隊列服務。
單擊左側導航欄中隊列,進入隊列頁面。
單擊頁面創建隊列按鈕,將會彈出新建隊列對話框。
輸入隊列名稱(隊列名稱用戶可自由定義,本示例創建
delivery-result-queue
名稱的隊列),其他按默認值即可,然后單擊確認。
觸發事件分發并查看
使用郵件推送服務發送一封郵件后,在事件總線控制臺查看到事件的追蹤記錄;
查看事件分發目標的結果
打開輕量消息隊列控制臺,在隊列列表選擇事件總線目標配置的隊列(案例中為delivery-result-queue
)點擊收發消息按鈕,跳轉至收發消息快速體驗頁面;
點擊頁面下方接收消息按鈕,可查看到剛剛的事件消息,點擊詳情,可查看到對應的完整事件消息內容(可以看到事件ID與事件總線中的記錄一致,事件即成功分發到了輕量消息隊列);
設置發信地址級事件分發示例
按照以上示例流程配置的事件分發對郵件推送服務下所有的發信域名和地址生效,用戶可根據實際業務需求,修改事件規則的JSON串,來實現按照發信地址等過濾條件進行事件分發。
以下是指定發信地址test@hangzhou.dmtest.top進行郵件推送事件分發的示例,通過進行規則配置,使得只有從test@hangzhou.dmtest.top發出的郵件,其記錄消息才會由事件總線分發到事件目標。
1.在創建事件規則時,在模式內容中指定事件模式的具體內容,對指定字段內容進行過濾。
本示例中,模式內容如下:
{
"source": [
"acs.dm"
],
"type": [
"dm:Deliver:Fail",
"dm:Deliver:Succeed",
"dm:Trace:Click",
"dm:Trace:Open"
],
"data": {
"from": [
"test@hangzhou.dmtest.top"
]
}
}
這里是一個完整的事件消息體,用戶可基于事件體的內容和結構,參考事件模式,編寫事件規則的模式內容。
模式內容中的所有字段名都必須存在于事件體中,否則此事件消息會被過濾。
事件模式里的字段名必須和事件中的字段名具有相同嵌套結構。
事件模式是逐個字符精確匹配的 ,需注意大小寫,匹配過程中不會對字符串進行任何標準化的操作。
要匹配的值遵循JSON規則:用引號引起來的字符串、數字以及不帶引號的關鍵字true、false和null。
事件模式支持OR的語義,事件模式匹配中各個Key支持AND語義,Key的Value值支持數組OR的語義。
{
"datacontenttype": "application/json;charset=utf-8",
"aliyunaccountid": "1491110661959791",
"data": {
"rcpt": "example@example.com",
"deliver_time": "2024-05-22T08:27:42Z",
"err_code": "250",
"failed_type": "SendOk",
"env_id": "600000083914199845",
"send_time": "2024-05-22T08:27:41Z",
"err_msg": "250 Send Mail OK",
"header": {},
"from": "example2@aliyun.com",
"event": "dm:Deliver:Succeed",
"region": "cn-hangzhou",
"msg_id": "d93a742c-adec-487d-8c39-98069c583760@example.net",
"account": "example2@aliyun.com",
"status": 0
},
"subject": "acs:dm:cn-hangzhou:1491110661959791:*",
"aliyunoriginalaccountid": "1491110661959791",
"source": "acs.dm",
"type": "dm:Deliver:Succeed",
"aliyunpublishtime": "2024-05-22T08:27:42.539Z",
"specversion": "1.0",
"aliyuneventbusname": "default",
"id": "1223c134-b66d-4d53-b05e-780c0261ce22",
"time": "2024-05-22T08:27:42.462Z",
"aliyunregionid": "cn-hangzhou"
}
2.進行發信驗證,通過test@hangzhou.dmtest.top發送一封郵件;
3.在輕量消息隊列的隊列中(本示例和設置事件分發流程一樣,采用輕量消息隊列作為事件目標接收事件消息,用戶可自行設置事件目標)可查詢到此條消息。
4.使用其他發信地址發信后,在事件總線-事件追蹤中查詢到了該事件的詳情,但在輕量消息隊列側,不會收到此條事件消息,即實現了指定發信地址的回調通知。