发送邮件是应用程序中常见的需求,但大多数情况下都很麻烦。因此,我使用基于“官方”java邮件API的Apache Commons Email,并以最简单的方式发送邮件,即不需要对SMTP服务器进行身份验证。我只需要对目标主机名进行简单的MX查找,获取MX服务器并尝试在第一个服务器上传递我的消息(无论邮件是否被拒绝都是完全不同的问题,我可能很快就会问有关return-path: vs. from: vs. reply-to:以及这些头部在Java中如何处理的混乱问题的更多问题)。回到正题...所以我刚刚尝试将我的消息放在具有最低优先级得分的邮件服务器上。
以下是示例:我想写给
最后,我的问题是:如果该服务器以某种方式不可用怎么办?很简单——我去另一个服务器,但Apache Commons(我怀疑Java邮件API也是如此)不允许我这样做。
那么,处理这个问题的最佳方法是什么?我应该从头开始构建我的电子邮件并使用新主机名(mail2),还是有一些聪明的方法可以在Java中轻松解决这个问题?
以下是示例:我想写给
recipient@domain.com
。 MX查找告诉我,domain.com
知道两个MX服务器,它们是例如具有10优先级得分的mail1.domain.com
和具有20优先级得分的mail2.domain.com
。按照rfc的方式做事情是去访问优先级最低的服务器并在那里发送邮件。所以这就是我所做的。最后,我的问题是:如果该服务器以某种方式不可用怎么办?很简单——我去另一个服务器,但Apache Commons(我怀疑Java邮件API也是如此)不允许我这样做。
mail.smtp.host
变量位于消息中的会话道具内部,并且我无法获取它。那么,处理这个问题的最佳方法是什么?我应该从头开始构建我的电子邮件并使用新主机名(mail2),还是有一些聪明的方法可以在Java中轻松解决这个问题?
aspirin
或者甚至james
,或者一个完全功能的“外部”SMTP服务器(但在后一种情况下,每个客户端都必须设置自己的SMTP服务器,这对于现在的客户来说确实太过分了:)],但似乎这样做对于解决如此简单的问题来说有些过度杀伤力。或者只是我的“简单”和“过度杀伤力”的概念有些偏颇 :) - ingeniouscom.sun.mail.smtp.SMTPTransport
和javax.mail.Transport
。请注意,我想做的事情并不是不可能实现,只是对我来说似乎有点丑陋(等待异常,如果捕获到异常则创建一个新消息并尝试在下一个MX主机上删除它,等等)。 - ingenious