如何使用SMTP为SES配置SpringJavaMailSender?
我们正在尝试将Spring JavaMailSender配置为使用SMTP与Amazon的SES服务一起工作,但我们遇到以下错误:如何使用SMTP为SES配置SpringJavaMailSender?,spring,smtp,amazon-ses,smtps,Spring,Smtp,Amazon Ses,Smtps,我们正在尝试将Spring JavaMailSender配置为使用SMTP与Amazon的SES服务一起工作,但我们遇到以下错误: 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
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:我们已经在这里尝试了解决方案:没有任何运气。我刚刚遇到了同样的问题。事实上,我几周前试图解决它,但却被卡住了 我所做的第一件事是确定问题:激活邮件api的调试模式
<props>
...
<prop key="mail.debug">true</prop>
</props>
我的同事指出,要包含另一个邮件属性来真正使用SSL
<props>
...
<prop key="mail.transport.protocol">smtps</prop>
...
</props>
...
smtps
...
添加此值后,“isSSL”值变为true,但指出了另一个错误。它不再使用身份验证,因为协议发生了变化,当然可以通过改变属性来修复
<prop key="mail.smtp.auth">true</prop>
true
到
true
在那次旅行之后,我终于成功了:-)
希望对你有帮助
仅总结一下正确的属性:
<props>
<prop key="mail.smtps.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
<prop key="mail.transport.protocol">smtps</prop>
</props>
真的
真的
smtps
基于@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>
@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;
}
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
真的
真的
smtps
不要忘记
配置,否则就不会考虑javaMailProperties。此代码适用于我:
<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>
真的
smtp
25
真的
真的
abc@example.com
如果您想使用@Bean,以下内容对我很有用:
<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>
@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;
}
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
这个问题已经很老了,但如果有人需要Spring引导配置,这对我来说很有用:
<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>
@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;
}
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
邮件:
主机:email-smtp.us-west-2.amazonaws.com
港口:465
用户名:
密码:
特性:
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:否-reply@yourdomain.com
谢谢您的回答。我试过了,现在仍然看到:调试SMTP:尝试连接到主机“email SMTP.us-east-1.amazonaws.com”,端口465,isSSL false
我的配置现在看起来像这样:。。。真的smtps真的
有什么建议吗?这是一个很好的回答-我只想补充一点,如果您试图从Java类中配置协议,您可能希望使用mailssender.setProtocol(“smtps”)