部署到Jelastic时,Java Mail代码失败

时间:2013-12-09 14:19:25

标签: java jelastic

我有一个运行动态Web项目的Tomcat / Eclipse。这包括一个已知良好的.war作为它的主要代码库。邮件.jar是mail.1.4.5.jar。

在本地使用时,设置在准确配置后,通过测试发送电子邮件没问题。它可以提供给各种端口和两个非常不同的SMTP服务器。但是当部署到Jelastic时,应用程序无法发送邮件。

我可以列出错误,它们有几个,包括有关运输问题的报告。可能提供一些答案的关键错误是,当Jelastic部署中的Java Mail配置为端口25时,应用程序将邮件报告为已交付。这适用于两台服务器。但邮件永远不会到来。我也检查了垃圾邮件,以确保邮件没有被反垃圾邮件捕获。

问题似乎很窄 - 只有端口25正在处理邮件传递,而Java Mail认为它已成功。但是有很多原因导致邮件可能没有到达,我不确定从哪里开始,或者在某些情况下,例如捕获出站邮件,如何调试。

这个问题可能与

有关

Grails mail delivery works fine locally

但如果这是同一个问题,则问题是Java范围的,不仅限于Grails。

2 个答案:

答案 0 :(得分:1)

这个问题的子结构甚至可能比Java更广泛,它可能适用于所有Jelastic部署。但我将介绍Java。

第一步应该是检查应用程序依赖性,正如OP链接到的帖子中有详细解释的那样。 OP解释说他们有应用程序正在进行测试/开发,但我再次提到这是Java部署错误的常见原因。

接下来,Jelastic不提供邮件传输应用程序(Java Mail用于传递)。因此,Jelastic主机上提供的任何MTA都由底层操作系统提供。当然,大多数服务器都有这样的规定,但可能因主机而异。

这对我来说很有意义,因为邮件传输是一项单独的服务。如果Jelastic提供邮件传输,则期望将作为单独/可监视/可充电插件进行控制。但缺少这样的插件意味着发送邮件的应用程序依赖于主机的基础设置(...但是请稍微看一下)。这种缺乏传输可能是合乎逻辑的,但是,这与共享服务器的共同期望相反。

我的下一个评论适用于Layershift对Jelastic的实现,但我希望其他Jelastic主机提供的内容大致相同。

  • 你有一个跟踪帐户和IPv4吗? 除非您有付费帐户和静态IP地址,否则不会启用Layershift的MTA。就这么简单。
  • Layershift的MTA配置
    仅适用于端口25,不适用于SSL。

如果OP使用的是Layershift,或者是具有类似软件堆栈的Jelastic主机,那么只有端口25才能工作。这种缺乏规定的原因是,显然成功交付的邮件从未被转发到服务器(OP无法知道这一点)。

我发现只提供端口25限制。某些SMTP服务器作为反垃圾邮件措施打开其他端口。然而,我在Layershift的支持下完成了这一点,似乎他们的规定不受限制,只是粗略。起...

Layershift明确表示不依赖底层传输(仅适用于测试)。他们指出,电子邮件来源将来自其上游公共IP,而不是用于邮件,因此不会满足反垃圾邮件检查。他们的立场是,通过其中一个新的外部服务(如

)更好地处理交易电子邮件的发送

Mailjet,Mandrill,Sendgrid

(抱歉,我无法发布这些链接)

请注意,其中一些服务对于低使用率是免费的。

同样,这在服务提供方面具有很大意义,但与普遍期望相反。

最后,如果您有非常专业的需求,Jelastic已经启用了一些代码来运行您自己的电子邮件服务器。这似乎与OP的需求相反 - 太麻烦和维护,但如果这是目标,

Jelastic - run your own mail server

希望有所帮助。

答案 1 :(得分:0)

您是否尝试过使用除localhost之外的任何其他外部SMTP服务器来解决该问题:25?例如,gmail SMTP?