gpt4 book ai didi

email - 如何检查 Siebel 是否已成功发送电子邮件?

转载 作者:行者123 更新时间:2023-12-02 04:36:16 25 4
gpt4 key购买 nike

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

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,我们的代码成功完成。稍后(可以是几秒到几小时后),我们会收到“Message undeliverable”的错误信息,但此时我们只知道有一个出站消息失败了,我们不知道是哪一个。

Siebel 有什么方法可以自动处理这些“消息无法传递”通知吗?

我们正在考虑为此编写我们自己的流程,但这似乎是一项艰巨的任务:我们必须解析传递失败通知,识别失败的收件人,搜索最近发送到该地址的所有邮件,以及不知何故,猜猜哪一个失败了(如果我们幸运并且可以在 Siebel 中读取它,则基于 Message-Id,否则在 Subject 上)。

最佳答案

问题是 SMTP 本质上既不是同步协议(protocol)也不是可靠协议(protocol)(即“为保证交付而设计”的意义上)。您的 Siebel 应用程序服务器将连接到其分配的 SMTP 服务器并要求它接受要传送的消息,届时可以执行一些高级验证(您已经提到了其中一些,但也可以包括策略执行例如检查您的(可能是匿名的)身份是否有权将消息中继到外部域)。一旦该对话结束,您就没有多少其他可靠的事情可以做,因为从那一点开始的一切都是异步的并且不能保证交付(可以涉及任何数量的中间中继代理,每个代理都有自己的中断可能性,有或没有重试,每个人都能够尊重或忽略传递请求或阅读回执或报告无效收件人,将您的邮件扔进垃圾文件夹等)。当然,您可以尝试处理您碰巧收到的任何退回通知,以尝试将它们关联回发件人,但这将超出您的发送代码的上下文。

关于email - 如何检查 Siebel 是否已成功发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42340722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com