【问题标题】:SMTP error code complianceSMTP 错误代码合规性
【发布时间】:2009-10-04 17:10:30
【问题描述】:

我不太确定这是否是提出这个问题的最佳地点(或服务器故障)。我正在使用第 3 方 .NET SMTP 组件将电子邮件直接发送到收件人的邮件服务器。我需要这样做以获得交付的实时结果。通过另一个 SMTP 服务器发送需要我通过 DSN 报告异步获取结果,这对我的应用程序的性质来说太麻烦了。

无论如何,我遇到了目标 SMTP 服务器返回的错误代码与错误消息不符的问题。因此,我无法将交付标记为硬反弹或软反弹。例如。回复错误码是450(意思是邮箱不可用),但是回复消息是和超时有关的。当我再次发送相同的消息时,它通过了。显然是上次发送的超时问题。

我也意识到,问题可能不是接收 SMTP 服务器,而是保护服务器的防火墙/代理(不管你怎么称呼它)。

有没有人遇到过类似的问题,你是怎么处理的。

PS:当我回到办公室时,我会尝试从我的日志中提供更多详细信息。

【问题讨论】:

    标签: smtp


    【解决方案1】:

    听起来像是灰名单。这很有趣,因为当我开始阅读您的问题时,这是我能预料到的第一个障碍。

    灰名单是一种反垃圾邮件方法,它通过在合法的 MTA 将在一段时间后尝试重新提交邮件的基础上软失败传递来工作。不幸的是,有两件事对您不利:

    • 灰名单周期可以随机选择。这意味着有时需要多次重试才能接受消息传递。
    • 虽然 4xx 代码应始终被视为软故障并用于此目的,但服务器没有任何要求告诉您这是由于灰名单。有些人会很友善,有些人不会。

    您如何处理这取决于软故障是否被视为您的应用程序正在执行的最终故障。如果不是,那么您将不得不设计一些可靠的排队和重试。我对您的诚实建议是,实现可靠的 DSN 或日志检查可能比发明您自己的符合 RFC(和 quirk)的 MTA 更容易。

    【讨论】:

    • @Dan,非常依赖。灰名单是我怀疑的,我没有想到随机方面。我非常努力地避免使用 DSN 方法,因为这意味着我将不得不在我的应用程序中添加另一块无法证明成本合理的东西。我确实通过监视回复消息并在我的逻辑中添加条件以“标记”交付的退回类型来“发明”我自己的 RFC。任何人,为你准备一个。在我关闭此之前,将再等几天以获得更多输入。谢谢老兄。
    • 没问题。当然,只有本地 MTA 配置错误而不是灰名单的可能性很小。但无论哪种方式,所有相同的原则仍然适用。
    猜你喜欢
    • 2018-04-13
    • 2016-02-06
    • 2017-01-19
    • 2020-04-24
    • 1970-01-01
    • 2012-11-16
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    相关资源
    最近更新 更多