无法连接到SMTP主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1

时间:2011-12-21 16:46:44

标签: smtp amazon-web-services ssl amazon-ses

我正在尝试使用亚马逊的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

7 个答案:

答案 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上起作用。