Pregunta Tiempo de espera de Amazon EC2 / SES SMTP


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 más 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.


32
2018-06-25 17:17


origen


Respuestas:


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 dije en el último párrafo de mi publicación, puedes Solicitud para eliminar las limitaciones de envío de correo electrónico tener estos límites planteados. Lo hice y el problema se detuvo (les tomó alrededor de 5 horas para eliminar mis límites).


Actualizar

El estrangulamiento EC2 está documentado en Conexión al punto final SMTP de Amazon SES y realmente restringido 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 oficiales de SES estén usando el puerto 25 de hecho):

Importante 

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

Tenga en cuenta que esto también podría estar un poco desactualizado, ya que tanto Consola de administración de AWS y sección Problemas SMTP de Amazon SES se refieren a los puertos alternativos más comunes 465 y 587 únicamente:

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 tiempos 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   intentar exceder esos límites Para eliminar estos límites, envíe un    Solicitud para eliminar las limitaciones de envío de correo electrónico. También puedes conectarte   a Amazon SES a través del puerto 465 o puerto 587, ninguno de los cuales está acelerado.


45
2018-06-25 19:44



Si está ejecutando una aplicación de Django y sospecha 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=['your+email@example.com'],
   ...:     from_email='from@example.com',
   ...: )
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.


1
2017-08-30 13:13