Как настроить 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 без всякого успеха.
5 ответов:
На основе @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" />, иначе свойства javamail не будут приняты во внимание.
Я только что столкнулся с той же проблемой. На самом деле, я пытался решить ее несколько недель назад и застрял ...
Первое, что я сделал, чтобы определить проблему: активировал режим отладки для почтового 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>После добавления этого значения значение "issl" изменилось на true, но указало на другую ошибку. Он не использует аутентификации больше нет, из-за изменения протокола, которое можно исправить, конечно, изменив свойство
<prop key="mail.smtp.auth">true</prop>To
<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>
Этот код работает для меня:
<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>
Если вы хотите использовать @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; }
Этот вопрос довольно стар, но если кому-то нужна конфигурация Spring boot, это то, что сработало для меня:
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]
Comments