本文介紹Direct Mail服務如何通過整合阿里雲事件匯流排服務,實現郵件投遞結果的分發通知。
使用者成功進行事件匯流排相關配置後,通過Direct Mail服務發送的郵件,其投遞結果將按照在事件匯流排中設定的事件分發規則,發送至指定的事件目標(輕量訊息佇列、HTTP等),實現投遞結果的非同步擷取。
下文將詳細介紹如何完成事件分發設定。
事件匯流排服務開通與訪問授權
1.在阿里雲首頁搜尋事件匯流排或 EventBridge,免費開通事件匯流排服務
建立事件規則
在控制台-事件匯流排-雲端服務專用事件匯流排-建立規則,建立Direct Mail服務的事件分發規則,配置基本資料,填寫規則名稱和描述;
配置事件模式,事件來源類型為阿里雲官方事件來源,事件來源選擇acs.dm
,事件類型目前支援發送失敗、發送成功、點選連結、開啟郵件,使用者可按需添加,未添加的事件類型會被過濾。
配置事件目標,選擇服務類型,這裡以輕量訊息佇列為例,指定發送到的目標隊列(輕量訊息佇列服務的開通與隊列的建立請參考下文“開通輕量訊息佇列並建立訊息接收的隊列”章節),訊息體預設選擇完整事件,不進行base64編碼,重試和死信選型可按需設定,設定完成後點擊建立規則。
規則建立完成後,可在事件匯流排概覽中進行查看。
事件類型和修改方式
目前支援的事件類型
投遞成功:Deliver:Success
投遞失敗:Deliver:Fail
開啟郵件:Deliver:Open
點擊郵件中的連結:Deliver:Click
修改各類事件的統計
左側導覽列點擊事件規則-編輯事件模式-事件類型,可對事件類型進行修改。
開啟或者點擊事件的統計的前提
如果需要對郵件的開啟和點擊行為事件進行通知分發,前期是開啟資料跟蹤功能,詳細操作可參考如何開啟資料跟蹤功能?。
接收事件分發訊息,驗證鏈結路已通
以上文流程設定的事件目標輕量訊息佇列為例,驗證事件分發鏈路。
開通輕量訊息佇列並建立訊息接收的隊列
進入輕量訊息佇列控制台,若未開通輕量訊息佇列服務,則按引導先開通輕量訊息佇列服務。
單擊左側導覽列中隊列,進入隊列頁面。
單擊頁面建立隊列按鈕,將會彈出建立隊列對話方塊。
輸入隊列名稱(隊列名稱使用者可自由定義,本樣本建立
delivery-result-queue
名稱的隊列),其他按預設值即可,然後單擊確認。
觸發事件分發並查看
使用Direct Mail服務發送一封郵件後,在事件匯流排控制台查看到事件的追蹤記錄;
查看事件分發目標的結果
開啟輕量訊息佇列控制台,在隊列列表選擇事件匯流排目標配置的隊列(案例中為delivery-result-queue
)點擊收發訊息按鈕,跳轉至收發訊息快速體驗頁面;
點擊頁面下方接收訊息按鈕,可查看到剛剛的事件訊息,點擊詳情,可查看到對應的完整事件訊息內容(可以看到事件ID與事件匯流排中的記錄一致,事件即成功分發到了輕量訊息佇列);
設定發信地址級事件分發樣本
按照以上樣本流程配置的事件分發對Direct Mail服務下所有的發信網域名稱和地址生效,使用者可根據實際業務需求,修改事件規則的JSON串,來實現按照發信地址等過濾條件進行事件分發。
以下是指定發信地址test@hangzhou.dmtest.top進行Direct Mail事件分發的樣本,通過進行規則配置,使得只有從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.使用其他發信地址發信後,在事件匯流排-事件追蹤中查詢到了該事件的詳情,但在輕量訊息佇列側,不會收到此條事件訊息,即實現了指定發信地址的回調通知。