0

我正在尝试使用在 AWS EC2 Lynx 机器上运行的 SMTPS 连接器在运行时 Mule 上向 AWS SES 发送电子邮件,但我不断收到“无法连接到邮件传输”Mule 异常。

我可以从 EC2 机器 Telnet 到 AWS SES 端点,但无法让 EHLO 工作,我可能在那里做错了什么。我可以使用相同的 SMTPS 连接器和相同的 AWS SES 凭证从我自己在 Anypoint 上运行我的应用程序的 PC 成功地将电子邮件发送到 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>

这是日志的相关部分

信息 org.mule.lifecycle.AbstractLifecycleManager - 初始化:'SMTPS.dispatc her.1395684883'。对象是:SmtpMessageDispatcher 2016-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 - 加载配置文件:


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

元素:/sendEmailFlow/processors/0/0/0 @ feecalculator:sendEmail l.xml:22(产品 SMTPS)

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

我的本地机器上的区别是 'tls-default.conf not found' :

信息 2016-11-08 16:19:16,533 [[feecalculator].HTTP_Listener_Configuration.worker.08] org.mule.lifecycle.AbstractLifecycleManager:初始化:'SMTPS.dispatcher.1555978287'。对象是:SmtpMessageDispatcher INFO 2016-11-08 16:19:16,539 [[feecalculator].HTTP_Listener_Configuration.worker.08] org.mule.api.security.tls.TlsPropertiesMapper:默认 mule.email.smtps 信任库到客户端密钥库WARN 2016-11-08 16:19:16,574 [[feecalculator].HTTP_Listener_Configuration.worker.08] org.mule.api.security.tls.TlsProperties:未找到文件 tls-default.conf,使用默认配置。信息 2016-11-08 16:19:20,100 [[feecalculator].HTTP_Listener_Configuration.worker.08] org.mule.lifecycle.AbstractLifecycleManager:开始:'SMTPS.dispatcher.1555978287'。对象是:SmtpMessageDispatcher

4

1 回答 1

0

解决了:

在我的开发机器上,Anypoint 默认在“security”文件夹中安装了 JRE 1.8 的“cacerts”信任库,其中包含对 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 则没有。

于 2017-01-21T23:54:06.527 回答