我正在尝试使用亚马逊的SES / SMTP发送电子邮件,我收到以下错误:
javax.mail.MessagingException:无法连接到SMTP主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1
以下是我尝试发送邮件的方式:
Spring邮件发件人配置:
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="${mail.server}"/>
<property name="port" value="${mail.port}"/>
<property name="username" value="${aws.mail.smtp.user}"/>
<property name="password" value="${aws.mail.smtp.password}"/>
<property name="javaMailProperties">
<props>
<!-- Use SMTP-AUTH to authenticate to SMTP server -->
<prop key="mail.smtp.auth">true</prop>
<!-- Use TLS to encrypt communication with SMTP server -->
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
with:
mail.server =email-smtp.us-east-1.amazonaws.com
mail.port = 465
答案 0 :(得分:12)
使用亚马逊SES,配置需要如下:
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.ssl.enable">true</prop>
而不是:
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
正如戴夫暗示的那样。
编辑:请使用此解决方案:https://stackoverflow.com/a/8928559/536299
答案 1 :(得分:4)
Amazon SES SMTP在SMTP会话之前需要SSL。 SES不支持StartTLS命令。
答案 2 :(得分:1)
这些设置对我有用:
mail.transport.protocol=smtp mail.smtp.port=25 mail.smtp.auth=true mail.smtp.starttls.enable=true mail.smtp.starttls.required=true mail.smtp.host=email-smtp.us-east-1.amazonaws.com mail.smtp.user=[SMTP username] mail.smtp.password=[SMTP user password]
如果您尝试使用SSL连接连接到连接,则会拒绝连接。所以你需要在连接后做STARTTLS。
您可以添加mail.debug = true以查看失败的位置。
发件人电子邮件地址必须是经过验证的电子邮件地址,否则SES拒绝转发该电子邮件。
答案 3 :(得分:0)
AWS的这名员工表示SES根本不支持SSL。 https://forums.aws.amazon.com/message.jspa?messageID=218303。
Amazon SES将尝试发送启用了传输层安全性的电子邮件,但无法保证使用TLS发送邮件。 SES在发送电子邮件时使用机会性TLS,这意味着它将首先尝试通过TLS发送电子邮件,然后在TLS不可用时将回退到常规SMTP。
因此,我认为您所看到的问题不是TLS或SSL相关,而是其他问题。
答案 4 :(得分:0)
请注意,https://forums.aws.amazon.com/message.jspa?messageID=218303处的AWS说明是指加密服务器到服务器的通信以保持电子邮件的机密性,这是所有SMTP服务的共享特征。
此问题涉及使用与AWS SMTP服务器的安全连接来保护用于通过AWS服务器进行身份验证的密码。
答案 5 :(得分:0)
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.host", "email-smtp.us-east-1.amazonaws.com");
props.setProperty("mail.user", "your_ses_user");
props.setProperty("mail.password", "your_ses_pwd");
Session mailSession = Session.getDefaultInstance(props, new Authenticator(){
public PasswordAuthentication getPasswordAuthentication() {
String username = "your_ses_user";
String password = "your_ses_pwd";
return new PasswordAuthentication(username, password);
}
});
这些代码已经过测试,效果很好。 如果您想使用SMTP over SSL,请配置:
props.setProperty("mail.smtp.starttls.enable", "true");
或者您可以从HERE下载AWS Java SDK。
代码示例为HERE
答案 6 :(得分:0)
我在端口25上遇到了同样的问题,但对我来说,它在端口587上起作用。