Java邮件代码在部署到Jelastic时失败

Java邮件代码在部署到Jelastic时失败,java,jelastic,Java,Jelastic,我有一个运行动态web项目的Tomcat/Eclipse。这包括一个已知的good.war作为它的主要代码库。jar是mail.1.4.5.jar 在本地使用时,该设置在准确配置后,可以通过测试发送电子邮件。它可以传送到多种端口和两个截然不同的SMTP服务器。但部署到Jelastic后,该应用程序无法发送邮件 我可以列出一些错误,包括关于交通问题的报告。关键错误(可能会提供一些答案)是,当Jelast部署上的Java Mail配置为端口25时,应用程序会报告邮件已送达。这在两台服务器上都有效。但

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

在本地使用时,该设置在准确配置后,可以通过测试发送电子邮件。它可以传送到多种端口和两个截然不同的SMTP服务器。但部署到Jelastic后,该应用程序无法发送邮件

我可以列出一些错误,包括关于交通问题的报告。关键错误(可能会提供一些答案)是,当Jelast部署上的Java Mail配置为端口25时,应用程序会报告邮件已送达。这在两台服务器上都有效。但是邮件永远不会到达。我也检查过垃圾邮件,以确保邮件没有被反垃圾邮件截获

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

这个问题可能跟,


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

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

此问题的子结构可能比Java更广泛,它可能适用于所有Jelast部署。但我会介绍Java

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

接下来,Jelastic不提供邮件传输应用程序(JavaMail使用该应用程序进行传递)。因此,Jelast主机上提供的任何MTA都是由底层操作系统提供的。当然,大多数服务器都会有这样的配置,但可能会因主机而异

这对我来说很有意义,因为邮件传输是一项独立的服务。如果Jelastic提供了一个邮件传输,那么期望将控件作为一个单独的/可监视的/可计费的插件。但缺少这样一个插件意味着发送邮件的应用程序依赖于主机的底层配置(…但请看下面的内容)。这种传输的缺乏可能是合乎逻辑的,但是,它与共享服务器的常见期望相反

我接下来的评论适用于Layershift对Jelastic的实现,但我希望其他Jelastic主机的规定也大致相同

  • 您有跟踪帐户和IPv4吗?
    除非您拥有付费帐户和静态IP地址,否则不会启用Layershift的MTA。就这么简单
  • Layershift的MTA配置
    仅在端口25上工作,没有SSL
如果OP使用Layershift,或者使用具有类似软件堆栈的Jelastic主机,这就是为什么只有端口25可以工作的原因。这就是为什么显然成功投递的邮件从未转发到服务器(OP不可能知道这一点)的原因

我发现只提供25号端口是有限制的。一些SMTP服务器作为反垃圾邮件措施,会打开其他端口。然而,在Layershift的支持下,我自己也经历了这一过程,而且他们的供应似乎并不有限,只是粗略的。向前

Layershift明确表示不依赖底层传输(因此,仅适用于测试)。他们指出,电子邮件来源将来自他们的上游公共IP,该IP不用于邮件,因此,例如,不会满足反垃圾邮件检查。他们的立场是,事务性电子邮件的发送由一种新的外部服务更好地处理,例如

Mailjet、Mandrill、Sendgrid

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

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

同样,作为服务提供,这是非常有意义的,但与一般期望相反

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


希望这能有所帮助。

…我想我现在也有了答案。我应该更清楚地解释我提到的服务器——它们是外部服务器,其中之一就是非常可用的Gmail。现在,Gmail可以配置额外的安全措施,因此对于任何阅读的人来说,它可能不再是开放式故障排除的最佳选择-如果您有,请尝试ISP服务器。这可能是其他人的有用参考: