JavaMail在Azure平台上引发了奇怪的异常,但在Linux上运行

时间:2016-01-14 20:07:09

标签: java azure javamail

我正在使用JavaMail的Java Web应用程序。我尝试使用Gmail帐户发送外发邮件。我将JavaMail配置为使用smtp.gmail.com作为主机,使用587作为端口。

我的测试环境是Amazon EC2上的Linux服务器。在测试环境中,它工作正常。

我的生产环境是在Azure上运行的Windows服务器。在该环境中,它失败并出现此异常:

2016-01-14 09:55:31,406无法连接到主机,端口:localhost,25;超时-1 com.sun.mail.util.MailConnectException:无法连接到主机,端口:localhost,25;超时-1;

我无法弄清楚为什么它报告localhost和25作为主机和端口。我确定我正确配置这些,因为它适用于Linux服务器(并且值在源代码中是硬编码的,所以我不会因为某些缺少的属性文件或环境变量而丢失它们)。

1 个答案:

答案 0 :(得分:0)

在Azure上,NSG的传出规则拒绝访问内部网,请参阅下面https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-nsg/中的图片。

enter image description here

因此,Azure VM上的应用程序无法通过GMail直接发送电子邮件,但您可以使用SendGrid来执行此操作。您可以参考文档How to Send Email Using SendGrid with Azure来了解它。

如果必须使用应用程序发送电子邮件,可以尝试配置NSG的传出规则以允许Internet访问。请参阅文档How to create NSGs in the Azure CLIHow to create NSGs in PowerShellHow to create the NSG for the back end subnet部分。

或者您可以尝试通过引用Azure新门户网站上的How to manage NSGs using the preview portal来直接添加出站安全规则。

否则,请检查Windows Server防火墙是否启用了绑定规则,请参阅https://technet.microsoft.com/en-us/library/jj717286.aspx了解如何创建出站角色。