使用SES的AWS EC2上的运行时Mule smtp连接器问题



我试图在运行时Mule上使用运行在AWS EC2 Lynx机器上的SMTPS连接器向AWS SES发送电子邮件,但我一直得到'无法连接到邮件传输' Mule异常。

我可以从EC2机器Telnet到AWS SES端点,但无法使EHLO工作,我可能在那里做错了什么。我可以使用相同的SMTPS连接器和相同的AWS SES凭证,从我自己的PC上运行Anypoint上的应用程序成功地将电子邮件发送到AWS SES,因此我知道那里一切都很好。

我在想Anypoint和runtime Mule之间一定有区别?

这是我的连接器代码,我是否需要添加一个信任存储,使其在运行时工作?

<smtps:connector name="SMTPS" contentType="text/html" validateConnections="true" doc:name="SMTPS">
    <smtps:tls-client /> 
    <smtps:tls-trust-store />
</smtps:connector>

这是日志的相关部分

INFO org.mule.lifecycle.AbstractLifecycleManager -初始化:' smtp。dispatc her.1395684883"。对象是:SmtpMessageDispatcher2016-11-08 16:30:25,149 [[feecalculator]. http_listener_configuration .worker。[01] INFO org.mule.api.security.tls.TlsPropertiesMapper -默认mule.email.smtp的信任存储到客户端密钥库2016-11-08 16:30:25,361 [[feecalculator]. http_listener_configuration .worker。[01] INFO org.mule.api.security.tls.TlsProperties -加载配置文件:tls- default.conf2016-11-08 16:30:25,620 [[feecalculator]. http_listener_configuration .worker。[01] ERROR org.mule.exception.CatchMessagingExceptionStrategy -


消息:无法连接到邮件传输。

元素:/sendEmailFlow/processors/0/0/0 @ feecalculator: sendemaill .xml:22 (Prod SMTPS)

异常堆栈为:无法连接到邮件传输。(org.mule.api.endpoint.EndpointException)

在我的本地机器上的差异是'tls-default.conf not found':

INFO 2016-11-08 16:19:16 . 533 [[feecalculator]. http_listener_configuration .worker。[08] org.mule.lifecycle.AbstractLifecycleManager:初始化:'SMTPS.dispatcher.1555978287'。对象是:SmtpMessageDispatcherINFO 2016-11-08 16:19:16 . 539 [[feecalculator]. http_listener_configuration .worker。[08]缺省的mule.email.smtps信任存储到客户端密钥库警告2016-11-08 16:19:16 . 574 [[feecalculator]. http_listener_configuration .worker。[08] org.mule.api.security.tls.TlsProperties:未找到tls-default.conf文件,使用默认配置。. INFO 2016-11-08 16:19:20,100 [[feecalculator]. http_listener_configuration .worker。[08] org.mule.lifecycle.AbstractLifecycleManager: Starting: ' smtp .dispatcher.1555978287'。对象是:SmtpMessageDispatcher

已解决:

在我的开发机器上,Anypoint默认为JRE 1.8安装的"cacerts"信任存储在"security"文件夹中,该文件夹包含AWS SES的信任,而AWS EC2 Lynx openJDK 1.8要么没有安装信任,要么Mule CE没有默认安装信任存储,我不确定是哪个。这就解释了为什么我的开发机器可以通过SES发送邮件,而生产系统却不能。

解决方案是使用openssl为SES域证书创建信任存储文件,并在SMTPS连接器中指定信任文件(SMTPS:tls-trust-store)。如果没有指定文件路径,则在不存在项目域时,需要将信任文件添加到项目域或项目应用程序的Mule项目src/main/resources文件夹中。

这个问题由于Anypoint和Mule CE之间的差异而变得更加复杂,Anypoint要求SES端点声明中包含'特殊字符'必须进行双转义,而Mule CE则不需要。

最新更新