Как настроить Spring JavaMailSender для SES с помощью SMTP?
Мы пытаемся настроить Spring JavaMailSender для работы с сервисом Amazon SES с использованием SMTP, но мы получаем эту ошибку:
javax.mail.MessagingException: Could not connect to SMTP host: email-smtp.us-east-1.amazonaws.com, port: 465, response: -1
Это наша конфигурация:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="email-smtp.us-east-1.amazonaws.com" />
<property name="port" value="465" />
<property name="username" value="..." />
<property name="password" value="..." />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
</props>
</property>
</bean>
Любые идеи, что может быть неправильным? Спасибо заранее.
PS: Мы уже пробовали решение здесь: Не удалось подключиться к хосту SMTP: email-smtp.us-east-1.amazonaws.com, порт: 465, ответ: - 1 без везения.
Ответы
Ответ 1
На основе ответа @GuCo: Это полная конфигурация, которая сработала для меня:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="email-smtp.us-east-1.amazonaws.com" />
<property name="port" value="465" />
<property name="protocol" value="smtps" />
<property name="username" value="..." />
<property name="password" value="..." />
<property name="javaMailProperties">
<props>
<prop key="mail.smtps.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
<prop key="mail.transport.protocol">smtps</prop>
</props>
</property>
</bean>
Не забывайте конфигурацию <property name="protocol" value="smtps" />
, иначе javaMailProperties не учитываются.
Ответ 2
Я столкнулся с одной и той же проблемой. На самом деле, я попытался решить его несколько недель назад и застрял...
Первое, что я сделал, чтобы определить проблему: активировать режим отладки для почты api
<props>
...
<prop key="mail.debug">true</prop>
</props>
Это показало мне, что на самом деле он не использует SSL
DEBUG SMTP: trying to connect to host "email-smtp.us-east-1.amazonaws.com", port 465, isSSL false
Мой коллега отметил, чтобы включить другое свойство почты, чтобы действительно использовать SSL
<props>
...
<prop key="mail.transport.protocol">smtps</prop>
...
</props>
После добавления этого значения значение "isSSL" изменилось на true, но указало на другую ошибку. Он больше не использует аутентификацию из-за изменения протокола, который может быть исправлен, конечно, с изменением свойства
<prop key="mail.smtp.auth">true</prop>
к
<prop key="mail.smtps.auth">true</prop>
После этого путешествия он, наконец, работал у меня: -)
Надеюсь, что это было полезно...
Просто, чтобы суммировать правильные свойства:
<props>
<prop key="mail.smtps.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
<prop key="mail.transport.protocol">smtps</prop>
</props>
Ответ 3
Этот код работает для меня:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="email-smtp.us-east-1.amazonaws.com" />
<!--Obtaining Your Amazon SES SMTP Credentials. use http://docs.aws.amazon.com/ses/latest/DeveloperGuide/smtp-credentials.html-->
<property name="username" value="smtp user name" />
<property name="password" value="smtp password" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.transport.protocol">smtp</prop>
<prop key="mail.smtp.port">25</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.smtp.starttls.required">true</prop>
<prop key="mail.smtp.from">[email protected]</prop>
</props>
</property>
</bean>
Ответ 4
Если вы хотите использовать @ Bean, для меня работало следующее:
@Bean
public MailSender mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("email-smtp.eu-west-1.amazonaws.com");
mailSender.setUsername("...");
mailSender.setPassword("...");
mailSender.setPort(465);
mailSender.setProtocol("smtps");
// This can be very helpful
Properties properties = new Properties();
properties.setProperty("mail.debug", "true");
mailSender.setJavaMailProperties(properties);
return mailSender;
}
Ответ 5
Этот вопрос довольно старый, но если кому-то нужна конфигурация загрузки Spring, это то, что сработало для меня:
mail:
host: email-smtp.us-west-2.amazonaws.com
port: 465
username: <username>
password: <pwd>
properties:
mail.smtp.auth: true
mail.smtp.starttls.enable: true
mail.smtp.starttls.required: true
mail.smtp.ssl.enable: true
mail.transport.protocol: smtps
mail.smtp.from: [email protected]