从java代码发送邮件 - 可靠的方式

时间:2013-07-09 07:53:28

标签: java email javamail apache-commons

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

所以我正在做的是采用Apache Commons Email(基于“官方”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中完成而不会太痛苦?

1 个答案:

答案 0 :(得分:1)

如果您尝试实施部分邮件服务器,而不仅仅是发送电子邮件,这听起来很有意思。路由,中继,缓存和传递重试是由所有邮件服务器实现和提供的操作,通常不是由邮件客户端完成的。

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