我們從7.8的Siebel應用發送大量的電子郵件,我們想以確定它們是否已成功交付與否。如何檢查Siebel是否已成功發送電子郵件?
According to the Bookshelf,如果SMTP服務器關閉,通訊對外管理重試後發送信息,所以這不是一個問題。然而,仍然有很多的問題,這可能會導致電子郵件無法傳遞,例如在地址輸入錯誤,已經達到了它的接收存儲配額等
我們送的消息是這樣的:
var ps = TheApplication().NewPropertySet();
ps.SetProperty("ActivityId", outboundEmailActivityId);
ps.SetProperty("CommProfile", commProfile);
ps.SetProperty("ProcessMode", "Local");
var bs = TheApplication().GetService("Outbound Communications Manager");
bs.InvokeMethod("SendMessage", ps, psOut);
使用ProcessMode = Local
使我們能夠檢測一些錯誤。例如,如果我們試圖在我們的SMTP服務器的同一個域發送消息到一個不存在的帳戶,它返回550 Unknown user
然後503 Must have sender and recipient first
。 Outbound Communications Manager引發異常,我們捕獲並處理它。
但是,如果我們向其他域中的不存在帳戶發送消息,我們的SMTP服務器無法知道它會失敗,因此它返回250 Queued
,我們的代碼成功完成。稍後(可能會在幾秒鐘到幾個小時之後),我們將收到「消息無法傳送」的錯誤消息,但此時我們只知道出站消息失敗,我們不知道該消息是哪一個。
有沒有什麼辦法,其中的Siebel可以自動處理這些「消息無法送達的」通知?
我們正在考慮爲此編寫我們自己的流程,但這似乎是一項艱鉅的任務:我們必須解析傳送失敗通知,識別失敗的收件人,搜索發送到該地址的所有最近消息,並以某種方式猜測哪一個失敗(基於Message-Id,如果我們很幸運並且可以在Siebel或其他主題中閱讀)。