java - 如何提高电子邮件发送和传递的可靠性?

标签 java email reliability

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

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

最佳答案

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

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

虽然,由于您有机会在 MTA 之上开发和实现您自己的逻辑,但不能保证:

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

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

要提高送达率,您可以做的最重要的事情是充分了解 SMTP、维护您自己的 MTA 并相应地配置它。当今的关键问题之一是每个人都在努力阻止垃圾邮件 - 每个人都有自己的方法来做到这一点。通常他们不会告诉你他们秘制酱料的配方。事实上,使用贝叶斯过滤,他们甚至可能不知道!

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

C.

关于java - 如何提高电子邮件发送和传递的可靠性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131691/

相关文章:

installation - 运行 shell 脚本时,如何保护它不被覆盖或截断文件?

c# - 有人试过亚麻吗?

java - 如何使用 Maven 包含 JavaParser 依赖项?

java - BiFunction 引用可以传递给需要功能接口(interface)的方法吗?

ios - 如何查看 MFMailComposeViewController 的邮件正文?

php - 在数据库中搜索重复项时,我是否应该将电子邮件区分大小写?

c# - 计划任务或服务的容错和可靠性最佳实践

java - Scala vs Java 性能(HashSet 和二元语法生成)

java - 我如何在 firebase 中自动递增一个值

PHP电子邮件管道