Проблема с соединителем SMTP для среды выполнения на AWS EC2 с использованием SES
Я пытаюсь отправить электронное письмо во время выполнения Mule, используя соединитель SMTPS, работающий на машине AWS EC2 Lynx, в AWS SES, но получаю исключение "Невозможно подключиться к почтовому транспорту".
Я могу подключиться через Telnet с компьютера EC2 к конечной точке AWS SES, но не могу заставить работать EHLO, возможно, я что-то там не так делаю. Я могу успешно отправить электронное письмо в AWS SES со своего собственного ПК, на котором запущено приложение в Anypoint, используя тот же SMTPS-разъем и те же учетные данные AWS SES, что я знаю, что там все хорошо.
Я думаю, что должна быть разница между Anypoint и 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 клиента к ключу клиента Store 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:sendEmai l.xml:22 (Prod 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 клиента к хранилищу ключей клиента ПРЕДУПРЕЖДЕНИЕ 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
1 ответ
Решено:
На моей машине разработки Anypoint по умолчанию установлено хранилище доверия 'cacerts' JRE 1.8 в папке 'security', которая содержит доверие к AWS SES, тогда как в AWS EC2 Lynx openJDK 1.8 либо не установлено доверие, либо Mule CE по умолчанию не имеет значение установленное хранилище доверия, я не уверен, какой. Это объясняет, почему моя машина разработки могла отправлять почту через SES, а производственная система не могла.
Решение состоит в том, чтобы использовать openssl для создания файла хранилища доверенных сертификатов для сертификата домена SES и указать файл доверия в соединителе SMTPS (smtps:tls-trust-store). Если путь к файлу не указан, файл доверия необходимо добавить в папку src/main/resources проекта Mule для домена проекта или приложения проекта, если домен проекта не существует.
Эта проблема еще более усложняется из-за разницы между Anypoint и Mule CE, Anypoint требует, чтобы объявления конечной точки SES, содержащие "специальные символы", дважды экранировались, в отличие от Mule CE.