【问题标题】:Runtime Mule SMTPs connector issue on AWS EC2 using SES使用 SES 在 AWS EC2 上运行时 Mule SMTP 连接器问题
【发布时间】:2016-11-02 23:07:50
【问题描述】:

我正在尝试使用运行在 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>

这是日志的相关部分

INFO org.mule.lifecycle.AbstractLifecycleManager - 初始化:'SMTPS.dispatc her.1395684883'。对象是:SmtpMessageDispatcher 2016-11-08 16:30:25,149 [[feecalculator].HTTP_Listener_Configuration.worker.01] 信息 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.conf 2016-11-08 16:30:25,620 [[feecalculator].HTTP_Listener_Configuration.worker.01] 错误 org.mule.exception.CatchMessagingExceptionStrategy -


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

元素:/sendEmailFlow/processors/0/0/0 @ feecalculator:sendEmail l.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'。对象是: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

【问题讨论】:

  • 谢谢迈克尔,smpts 端口必须是 465 或 2465 我不能使用 25,所以它没有被限制,这也不能解释为什么连接在我的本地机器上工作,但在 EC2 上却没有相同的 smtps设置和凭据
  • 我想你得到了一个例外。你能发布你的日志吗?如果是 TSL,您需要在 mule 中建立信任库,或者在您的 pc 上的 jvm 级别的 cacert 中信任证书。
  • 嗨 Mauro 我怀疑这一定是证书问题,我猜我本地机器上的 cacert 是可信的,而 EC2 服务器不可信,你知道我如何证明这一点吗?我明天会发布异常日志
  • 我已将日志的相关部分添加到我原来的问题中

标签: amazon-ec2 runtime mule amazon-ses smtps


【解决方案1】:

已解决:

在我的开发机器上,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 没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 2014-05-05
    • 2020-08-10
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2018-09-13
    相关资源
    最近更新 更多