![验证使用 Java 应用程序发送的邮件是否由 SMTP 邮件服务器送达目的地](https://linux22.com/image/536804/%E9%AA%8C%E8%AF%81%E4%BD%BF%E7%94%A8%20Java%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%8F%91%E9%80%81%E7%9A%84%E9%82%AE%E4%BB%B6%E6%98%AF%E5%90%A6%E7%94%B1%20SMTP%20%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%81%E8%BE%BE%E7%9B%AE%E7%9A%84%E5%9C%B0.png)
我正在尝试使用 Java 测试应用程序和邮件服务器发送大量邮件,比如 1000 封,但尽管应用程序确认它已无任何例外地发送了所有 1000 封邮件,但我没有在收件人邮箱的收件箱中收到准确数量(1000 封)的邮件(所有邮件都发送给同一个电子邮件收件人以测试应用程序的可靠性)。每次执行应用程序时,其中几封邮件都会丢失。Java 应用程序是否有任何方法可以验证使用邮件服务器发送的每封邮件是否已到达目的地?为什么它们会丢失?如果有人可以提供关于如何解决这个问题的提示/建议,那将非常有帮助。
谢谢,祝你有个愉快的一天
答案1
不,我认为不能。您可以验证电子邮件是否已正确发送到您的 SMTP 服务器,但邮件可能还会经过其他几个 SMTP 服务器,其中一个服务器可能会在您不知情的情况下将您的邮件标记为垃圾邮件。
我认为确保互联网邮件能够送达的最佳方法是确保您的邮件不会被标记为垃圾邮件。有几种简单的方法可以做到这一点:
- 实施 DomainKeys 或 SPF(发件人策略框架)。您需要系统管理员的协助。
- 不要在电子邮件中放入太多 HTML
但是,您的邮件仍有可能无法送达。这就是互联网电子邮件的本质。
答案2
您的应用程序仅将邮件传送到您的 SMTP 服务器,然后由该服务器进一步传播(正如 Jeroen 刚才所说)。因此,您无法“看到”邮件是否已实际送达或在途中被丢弃为垃圾邮件。
对于递送通知,您可以查看“Disposition-Notification-To”标题在 RFC2298 中(参见第 2.1 节),但我猜这实际上不会有助于确定 Java 应用程序内部是否成功交付,除非您从那里访问确认邮箱。