Как настроить 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" />
Конфигурация, или же javaMailProperties не принимаются во внимание.
Я просто столкнулся с той же проблемой. На самом деле, я попытался решить это несколько недель назад и застрял...
Первое, что я сделал, чтобы определить проблему: активировать режим отладки для почтового 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>
Этот вопрос довольно старый, но в случае, если кому-то нужна конфигурация загрузки 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: no-reply@yourdomain.com
Если вы хотите использовать @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;
}
Этот код работает для меня:
<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">abc@example.com</prop>
</props>
</property>
</bean>