3

必须从您的应用程序发送邮件是很常见的事情,在大多数情况下,这真的很痛苦......你知道在哪里。

所以我正在做的是使用 Apache Commons 电子邮件(它基于“官方”java 邮件 api),并且我正在以最简单的方式发送电子邮件,即无需对 smtp 服务器进行身份验证。我只是对目标主机名进行简单的 MX 查找,获取 MX 服务器并尝试在第一个服务器上删除我的消息(邮件是否被拒绝是一个完全不同的问题,我可能很快就会问一个关于完全搞砸了 return-path: vs. from: vs. reply-to: 以及这些标头在java中(不)处理的方式)。回到正题...所以我只是尝试将我的消息放在偏好分数最低的邮件服务器上。

这是一个例子:我想写信给recipient@domain.com. MX Lookup 告诉我domain.com知道两个 MX 服务器,例如,它们mail1.domain.com具有优先级 10 和mail2.domain.com优先级 20。 rfc 做事的方法是转到具有最低优先级的服务器并将邮件放在那里。所以这就是我所做的。

最后是我的问题:如果该服务器以某种方式不可用会发生什么?这很简单——我转到另一台服务器,但 Apache Commons(我怀疑是 java mail api)不允许我这样做。该mail.smtp.host变量植根于电子邮件消息中会话的道具内部。我无法理解它。

那么处理这个问题的最佳方法是什么?我应该使用新的主机名(mail2)从顶部完全构建我的电子邮件,还是有一些聪明的方法可以让这一切在 java 中正常工作而没有太多痛苦?

4

1 回答 1

1

听起来您是否正在尝试实现部分邮件服务器,而不仅仅是发送电子邮件。路由、中继、缓存和投递重试是由所有邮件服务器实现和提供的操作,通常不由邮件客户端完成。

您应该做的是使用(一个!)现有的邮件服务器,该服务器配置为允许中继出站邮件,或者如果您无权访问这样的服务器(我怀疑),设置和操作您自己的服务器. 然后,您在其中配置服务器mail.smtp.host并忘记您所了解的所有有关 DNS 查找、服务器优先级以及如果没有 MX 服务器可访问时该怎么办的担忧。

于 2013-07-09T08:43:10.260 回答