我们从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或其他主题中阅读)。