2011-12-21 32 views
11

Estoy tratando de enviar correos electrónicos con el SES/SMTP de Amazon y recibo el siguiente error :No se pudo conectar con el host SMTP: email-smtp.us-east-1.amazonaws.com, puerto: 465, respuesta: -1

javax.mail.MessagingException: no se pudo conectar al host SMTP: email-smtp.us-east-1.amazonaws.com, puerto: 465, respuesta: -1

Aquí está cómo estoy tratando de enviar el correo:

Spring mail sender config:

<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> 

con:

mail.server =email-smtp.us-east-1.amazonaws.com 
mail.port = 465 

Respuesta

12

con Amazon SES, la configuración tiene que ser como sigue:

<prop key="mail.smtp.auth">true</prop>  
<prop key="mail.smtp.ssl.enable">true</prop> 

en lugar de:

<prop key="mail.smtp.auth">true</prop> 
<prop key="mail.smtp.starttls.enable">true</prop> 

como insinuado por Dave.

EDITAR: Utilice esta solución: https://stackoverflow.com/a/8928559/536299

+0

No creo que los fragmentos de código en esta respuesta sean correctos (debería ser "mail.smtps.auth", por ejemplo), pero la información en el enlace es buena y le llevará a la respuesta. – fivedogit

4

Amazon SES SMTP requiere el SSL antes de la sesión SMTP. El comando StartTLS no es compatible con SES.

+0

Gracias Dave, también he intentado establecer * mail.smtp.starttls.enable * en falso en vano. ¿Tiene usted alguna otra idea? – balteo

0

Este empleado de AWS establece que SES no soporta SSL en absoluto. https://forums.aws.amazon.com/message.jspa?messageID=218303.

Amazon SES will attempt to send email with Transport Layer Security enabled, but there is not a way to guarantee messages are sent with TLS. SES uses opportunistic TLS when sending emails, which means it will attempt to send emails over TLS first, and then will fall back to regular SMTP if TLS is unavailable.

Por lo tanto, creo que el problema que está viendo no está relacionado con TLS o SSL, sino algo más.

+0

Aparentemente este no es el caso - tuve que * habilitar * SSL para que el correo electrónico volviera a funcionar con mi servidor Railo. –

0

Tenga en cuenta que la nota de AWS en https://forums.aws.amazon.com/message.jspa?messageID=218303 se refiere al cifrado de la comunicación de servidor a servidor para mantener la confidencialidad del mensaje de correo electrónico, es una característica compartida de todos los servicios SMTP.

Esta pregunta se relaciona con el uso de una conexión segura al servidor AWS SMTP para proteger las contraseñas utilizadas para autenticarse con el servidor AWS.

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); 
    } 
}); 

Este código ha sido probado, funciona muy bien. Si desea utilizar SMTP sobre SSL, por favor config:

props.setProperty("mail.smtp.starttls.enable", "true"); 

o puede descargar AWS SDK Java de HERE.

Ejemplo de código es HERE

1

Estos ajustes trabajaron para mí:

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] 

Si intenta conectarse a conectarse a través de conexión SSL, se ha rechazado la conexión. Entonces necesita hacer STARTTLS después de la conexión.

Puede agregar mail.debug = true para ver dónde falló.

La dirección de correo electrónico del remitente debe ser una dirección de correo electrónico verificada, de lo contrario, SES se niega a reenviar el correo electrónico.

Cuestiones relacionadas