leave how ec2 aws amazon-web-services amazon-ec2 smtp amazon-ses

amazon-web-services - how - ses credentials



Tiempo de espera de Amazon EC2/SES SMTP (2)

Tengo un problema al tratar de enviar correos electrónicos desde mi instancia de EC2 utilizando SMTP a SES. Por alguna razón, recibo problemas esporádicos de tiempo de espera, donde ya no puedo contactar al host SMTP. Es importante tener en cuenta que el envío a través de SES funciona probablemente el 75% del tiempo.

Comenzaré con algunos detalles. Mi cuenta de SES está funcionando la mayor parte del tiempo. El correo electrónico del remitente se ha verificado y mis límites se han aumentado a 10k / día, 5 correos electrónicos / segundo. Tengo la impresión de que obtendría un error específico de límite si esto estaba relacionado con mis límites. Para mi configuración SMTP, estoy usando posfix w / TLS. He publicado una publicación muy similar en los foros oficiales de AWS SES, pero todavía no he tenido éxito. La información para esa publicación se encuentra en la parte inferior de esta publicación.

Aquí hay un ejemplo de un fracaso de esta mañana. Todos los comandos que ejecuté a continuación se ejecutaron desde la instancia de EC2 de la que intento enviar correo. Perdón por la publicación del tamaño de una novela, solo quiero asegurarme de incluir todo.

Un correo electrónico que me envié no fue entregado:

Jun 25 06:16:36 intranet01 postfix/smtp18832: 9E00C230DA: to=<myemailaddress>, relay=none, delay=150, delays=0.02/0.01/150/0, dsn=4.4.1, status=deferred (connect to email-smtp.us-east-1.amazonaws.comhttp://107.22.187.122:25: Connection timed out)

Y cuando vi el error intenté conectarme al servidor de correo electrónico a través del puerto 25. No pude conectarme:

root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.28.151... ^C

Unos minutos más tarde mi correo diferido finalmente fue procesado:

Jun 25 06:23:14 intranet01 postfix/smtp18861: 9E00C230DA: to=<myemailaddress>, relay=email-smtp.us-east-1.amazonaws.comhttp://184.73.218.23:25, delay=548, delays=548/0.02/0.21/0.36, dsn=2.0.0, status=sent (250 Ok 0000013823cf7441-83710873-e946-4c80-8a54-0dd72bae6f30-000000) Jun 25 06:23:14 intranet01 postfix/qmgr3972: 9E00C230DA: removed

Y ahora puedo conectarme al puerto 25:

root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.152.208... Connected to email-smtp.us-east-1.amazonaws.com. Escape character is ''^]''. 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-222567251 ^]

Para las patadas, decidí mirar el punto final del servidor SES. Resulta que es solo un ELB cname, con registros A que apuntan a interfaces en múltiples AZ.

root@intranet01 sbin# dig email-smtp.us-east-1.amazonaws.com ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.17.amzn1 <<>> email-smtp.us-east-1.amazonaws.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8592 ;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;email-smtp.us-east-1.amazonaws.com. IN A ;; ANSWER SECTION: email-smtp.us-east-1.amazonaws.com. 54 IN CNAME ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 174.129.200.82 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 184.73.219.75 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 107.20.152.208 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 107.20.160.81 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 107.20.203.50 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 107.22.229.233 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 174.129.6.189 ses-smtp-prod-335357831.us-east-1.elb.amazonaws.com. 60 IN A 174.129.28.151

Intenté enviar otro mensaje y falló. Esta vez hice un bucle a través de cada una de las direcciones de registro A que devolvió el nombre SES cname. No pude conectarme con ninguno de ellos. Durante este tiempo también intenté conectarme desde mi máquina local (no mi instancia EC2), y funcionó bien.

root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.28.151... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.6.189... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.22.229.233... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.203.50... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.160.81... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.152.208... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 184.73.219.75... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.200.82... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.28.151... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.6.189... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.22.229.233... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.203.50... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.179.13... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 107.20.160.81... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 184.73.219.75... ^C root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.200.82... ^C

Después de esperar alrededor de 30 segundos intenté de nuevo, esta vez funcionó.

root@intranet01 sbin# telnet email-smtp.us-east-1.amazonaws.com 25 Trying 174.129.28.151... Connected to email-smtp.us-east-1.amazonaws.com. Escape character is ''^]''. 220 email-smtp.amazonaws.com ESMTP SimpleEmailService-222567251 ^C^[ ^] telnet>

Como dije anteriormente, publiqué una publicación muy similar en el foro AWS SES. La publicación se puede encontrar a continuación.

https://forums.aws.amazon.com/thread.jspa?threadID=97736&tstart=0

Además, parece que no estoy solo, ya que encontré esta otra publicación en el foro de SES, parece el mismo problema.

https://forums.aws.amazon.com/thread.jspa?threadID=91260&tstart=0

Pensé que podría haber algún tipo de limitación de EC2 SMTP, así que llené el formulario de solicitud de "envío de correo electrónico desde EC2", pero me parece tonto ya que estoy usando el servicio de Amazon, a diferencia de un tercero. Hasta ahora no he recibido noticias de Amazon después de completar el formulario.

¿Alguien tiene alguna idea? Gracias por adelantado.


Entonces, aparentemente, EC2 tiene sus propios límites. Supuse (incorrectamente) que tener acceso de producción a SES también significaría limitaciones de SMTP relajadas de EC2, pero como son dos productos completamente separados, supongo que ese no es el caso.

Pero como indiqué en el último párrafo de mi publicación, puede solicitar que se eliminen las limitaciones de envío por correo electrónico para que se establezcan estos límites. Lo hice y el problema se detuvo (les tomó alrededor de 5 horas para eliminar mis límites).

Actualizar

La aceleración de EC2 está documentada en Conexión al punto final SMTP de Amazon SES y restringida al puerto 25, por lo que una solución alternativa e inmediata es simplemente usar el puerto 587 (es un poco desafortunado que varios ejemplos de SES oficiales usen el puerto 25):

Importante

Elastic Compute Cloud (EC2) acelera el tráfico de correo electrónico a través del puerto 25 de forma predeterminada. Para evitar tiempos de espera al enviar correos electrónicos a través del punto final SMTP desde EC2, use un puerto diferente (587 o 2587) o complete una Solicitud para eliminar las limitaciones de envío de correo electrónico para eliminar el acelerador.

Tenga en cuenta que esto también puede estar un poco desactualizado, ya que tanto AWS Management Console como la sección Amazon SES SMTP Issues se refieren a los puertos alternativos 465 y 587 más comunes:

Está enviando a Amazon SES desde una instancia de Amazon EC2 a través del puerto 25 y no puede alcanzar los límites de envío de Amazon SES o está recibiendo tiempo de espera : Amazon SES EC2 impone límites de envío predeterminados en el correo electrónico enviado a través del puerto 25 y acelera las conexiones salientes si intenta para exceder esos límites Para eliminar estos límites, envíe una Solicitud para eliminar las limitaciones de envío de correo electrónico . También puede conectarse a Amazon SES a través del puerto 465 o el puerto 587, ninguno de los cuales está acelerado.


Si está ejecutando una aplicación de Django y sospecha que la respuesta de Steffen podría ser la causa, aquí hay una prueba de fuego rápida:

In [1]: from django.core.mail.backends.smtp import EmailBackend In [2]: from django.core.mail import EmailMultiAlternatives In [3]: message = EmailMultiAlternatives( ...: subject=''testing the rate limit'', ...: body=''this is a test'', ...: to=[''[email protected]''], ...: from_email=''[email protected]'', ...: ) In [4]: backend_587 = EmailBackend(port=587) In [5]: backend_25 = EmailBackend(port=25) In [6]: backend_587.send_messages([message]) Out[6]: 1 In [7]: backend_25.send_messages([message]) # hangs for a long time. Might even timeout

El envío del correo electrónico desde el puerto 25 debe suspenderse. El envío del correo electrónico desde 587 debe enviarse rápidamente.