如何检查Siebel是否成功发送了电子邮件



我们从Siebel 7.8应用程序发送了许多电子邮件,我们想确定它们是否已成功交付。

根据书架,如果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。出站通讯经理提出了一个例外,我们捕获和处理它。

但是,如果我们将消息发送到其他域中的不存在的帐户,我们的SMTP服务器将不知道它会失败,因此它返回250 Queued,我们的代码成功完成。稍后(它可以从几秒钟到几个小时后),我们将收到一条"无法说明的消息"错误消息,但是目前我们只知道出站消息失败,我们不知道哪一个。

有什么办法可以自动处理这些"无法说明的消息"通知?

我们正在考虑为此编写自己的过程,但这似乎是一项巨大的任务:我们必须解析交货失败通知,确定失败的收件人,搜索所有发送到该地址的最新消息以及不知何故,猜测哪一个失败了(如果我们很幸运,请根据消息ID,可以在Siebel中阅读,或者在主题中阅读)。

问题是,SMTP本质上既不是同步协议也不是可靠的协议(即,从"为保证交付工程设计的意义上))。您的Siebel App Server将连接到其分配的SMTP服务器,并要求它接受一条消息以进行交付,当时有一些可以执行的高级验证(您已经提到了一些,但还可以包括策略执行例如检查您的(可能匿名)身份是否已授权将消息传达给外部域)。一旦对话结束了,您就没有其他可靠的事情要做,每个人都有能力尊重或忽略交货或阅读收据的请求,或者报告无效的收件人,将您的消息扔到垃圾文件夹中等等,等等)。当然,您可以尝试使用您碰巧尝试将它们与发件人联系起来的任何反弹通知,但这将不在发送代码的上下文中。

相关内容

  • 没有找到相关文章

最新更新