6

当前应用程序使用Simple Java Mail每天发送几封电子邮件,但有些电子邮件从未发送到客户端。

根据应用程序服务器日志,有几个邮件服务器超时,但这并不能解释丢失电子邮件的所有情况。添加重试功能将有助于解决超时问题,但总体上是否有任何其他方法可以提高电子邮件的可靠性?

4

5 回答 5

3

SMTP 的本质是它不实现事务完整性。

大约 6 年前,我对我当时工作的公司的邮件失败的原因进行了非常详细的分析。我只能看到接收 MTA,但这表明 MTA 的类型和失败率之间有很强的相关性(当时,远程端的 Novell Groupwise 和 Sendmail 最可靠,MSExchange 最少,与qmail 和其他在中间)。请注意,这是高度经验性的,可能反映了产品选择与可用技能,而不是特定 MTA 中的内在问题——而且它现在已经过时了。此外,它不是您可以有效控制的东西。

虽然,由于您有机会在 MTA 之上开发和实现自己的逻辑,因此无法保证:

1) 如果离开您的 MTA 后消息失败,您将收到任何退回通知

2) 如果您发送带有 DSN 请求的消息(请参阅 RFC 1891),则远程系统将实际发回 DSN

提高可传递性的最重要的事情是了解 SMTP,维护自己的 MTA 并进行相应的配置。这些天来的关键问题之一是每个人都在试图阻止垃圾邮件 - 每个人都有自己的方法来做到这一点。通常他们不会告诉你秘制酱汁的配方。事实上,使用贝叶斯过滤,他们甚至可能不知道!

我想下一个停靠港(在你检查了你的 SPF 是限制性和发布的,并且你不是 RBL'd 之后)将看看你如何确定你的邮件是否正在递送 - 正如我所说,你不能依赖 DSN。您不能依靠窃听您的电子邮件(例如,通过将它们作为 HTML 发送出去,例如),因为大多数 MUA 不会加载远程内容(再次防止垃圾邮件)。这只留下了保留内容服务器端并发送指向原始内容的可点击链接的选项。但这再次假设您的收件人总是想阅读您的消息。

C。

于 2010-01-25T13:41:08.890 回答
2

设置一个可用于您的应用程序的生产质量邮件服务器,并让它处理可靠邮件发送的所有非常肮脏的细节。您可能遇到了一些限制,例如旨在阻止垃圾邮件程序的灰名单。

一个相当简单的场景是 Linux 机器上的 Postfix。我个人喜欢 Ubuntu

于 2010-01-25T13:22:27.663 回答
2

Thorbjørn 和 symcbean 都提供了很多有用的信息,但它的完整性可能会让人不知所措。我会尽量让它更平易近人:

关于你能做的最糟糕的事情是在你的应用程序中构建一个 SMTP 客户端,并依靠它来将邮件发送到世界上的某个地方。一个更好的解决方案是在您自己的本地机器上运行“标准”MTA 和/或 SMTP 服务器,或者在最坏的情况下,在您自己的网络内运行。

因此,您的应用程序只需将邮件发送到您自己的邮件服务器,该服务器有望位于同一台机器上的 25 端口。没有 SSL 编码,没有垃圾邮件过滤,没有一堆可能出错的东西。此外,如果您的邮件服务器与您的应用程序在同一台机器上,它们(通常)要么都关闭,要么都打开。

一旦您的应用程序将其邮件推送到您的本地邮件服务器(这是快速且几乎万无一失的),将邮件发送到最终目的地就是该服务器的问题。在 Linux 服务器上,您将安装诸如 Sendmail、qmail、exim 或 postfix 之类的东西;在 Windows 上,我不知道。

这些“开箱即用”的邮件服务器中的任何一个都非常有能力将邮件发送出去。自动重复已内置,在(例如)1 小时、2 小时、4、12、24 和 48 小时后重试。您的邮件服务器将尽最大努力传递您的邮件,并且无需您付出额外的努力。失败的尝试将显示在邮件服务器的日志中,您可以对其进行分析并得出结论。如果在最后一次可能的尝试后失败,日志文件中也会注明,您可以断定接收方出现问题。所有这些功能都已内置,您甚至不应该考虑尝试将其构建到您自己的邮件客户端中。

最后说明:物理上的传输可能是成功的,即邮件已传递,但随后被收件人的邮件服务器或客户端视为垃圾邮件;或者(人类)收件人只是意外删除了它。没有软件可以肯定地解决这个问题。

于 2010-01-25T13:55:58.787 回答
2

在我看来,运行自己的邮件服务器正在迅速成为过去。

如果我的应用程序将发送多于几封电子邮件,我通常会设置一个电子邮件即服务提供商并忘记它。他们中的大多数只允许您在应用程序中使用他们的 SMTP。

作为奖励,他们中的大多数会向您显示有关谁对您的电子邮件做了什​​么的统计数据。

该领域的一些最知名的名称是sendgridmailjetpostmarkApp ,但您可以在这里找到一个有趣的比较

于 2012-02-03T15:54:34.563 回答
1

如果您只想每天向有限的一组接收者发送几封电子邮件,仅此而已,请尝试通过 gmail 帐户发送它们。

于 2010-01-25T10:49:34.283 回答