Pertanyaan Amazon EC2 / SES SMTP Timeout


Saya memiliki masalah ketika mencoba mengirim email dari turunan EC2 saya menggunakan SMTP ke SES. Untuk beberapa alasan saya mendapatkan masalah timeout sporadis, di mana saya tidak lagi dapat menghubungi host SMTP. Penting untuk dicatat bahwa mengirim melalui SES mungkin bekerja 75% dari waktu.

Saya akan mulai dengan beberapa detail. Akun SES saya berfungsi paling waktu. Email pengirim telah diverifikasi, dan batas saya telah ditingkatkan menjadi 10k / hari, 5 email / detik. Saya mendapat kesan bahwa saya akan mendapatkan kesalahan batas tertentu jika ini terkait dengan batas saya. Untuk konfigurasi SMTP saya, saya menggunakan posfix dengan TLS. Saya telah memposting posting yang sangat mirip di forum AWS SES resmi, tetapi belum berhasil di sana. Informasi untuk posting itu ada di bagian bawah posting ini.

Ini adalah contoh kegagalan dari pagi ini. Semua perintah yang saya jalankan di bawah ini dijalankan dari contoh EC2 yang saya coba kirimi email dari. Maaf untuk posting berukuran baru, saya hanya ingin memastikan saya memasukkan semuanya.

Email yang saya kirimkan kepada diri saya tidak terkirim:

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)

Dan ketika saya melihat kegagalan saya mencoba menghubungkan ke host email melalui port 25. Saya tidak dapat terhubung:

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

Beberapa menit kemudian email yang ditangguhkan saya akhirnya lolos:

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

Dan sekarang saya dapat terhubung ke port 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  
^]

Untuk iseng, saya memutuskan untuk melihat titik akhir host SES. Ternyata itu hanya sebuah nama panggilan ELB, dengan catatan A yang mengarah ke antarmuka di beberapa 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

Saya mencoba mengirim pesan lain dan gagal. Kali ini saya mengulang melalui masing-masing dari alamat catatan A bahwa nama SES kembali. Saya tidak dapat terhubung ke salah satu dari mereka. Selama ini saya juga mencoba menghubungkan dari mesin lokal saya (bukan contoh EC2 saya), dan itu bekerja dengan baik.

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

Setelah menunggu sekitar 30 detik, saya mencoba lagi, kali ini berhasil.

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>

Seperti yang saya nyatakan sebelumnya, saya memposting posting yang sangat mirip di forum AWS SES. Pos dapat ditemukan di bawah ini.

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

Juga, tampaknya saya tidak sendirian, karena saya menemukan posting lain ini di forum SES, terlihat seperti masalah yang sama.

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

Saya pikir mungkin ada semacam batasan SMTP EC2, jadi saya mengisi formulir permintaan "mengirim email dari EC2", tetapi tampaknya konyol bagi saya karena saya menggunakan layanan Amazon, dibandingkan dengan pihak ke-3. Sejauh ini saya belum mendengar apa pun dari Amazon setelah mengisi formulir.

Apakah ada yang punya ide? Terima kasih sebelumnya.


32
2018-06-25 17:17


asal


Jawaban:


Jadi rupanya EC2 memiliki batas itu sendiri. Saya berasumsi (salah) bahwa memiliki akses produksi ke SES juga berarti mengurangi keterbatasan SMTP dari EC2, tetapi karena keduanya merupakan produk yang benar-benar terpisah, saya rasa itu bukan masalahnya.

Tapi seperti yang saya nyatakan di paragraf terakhir dari posting saya, Anda bisa Permintaan untuk Menghapus Keterbatasan Pengiriman Email agar batas-batas ini ditingkatkan. Saya melakukan itu dan masalah berhenti (butuh waktu sekitar 5 jam untuk menghilangkan batasan saya).


Memperbarui

The EC2 throttling didokumentasikan dalam Menghubungkan ke Amazon SES SMTP Endpoint dan sebenarnya dibatasi ke port 25, jadi solusi alternatif dan segera hanya menggunakan port 587 sebagai gantinya (agak disayangkan bahwa beberapa contoh SES resmi menggunakan port 25 memang):

Penting 

Elastic Compute Cloud (EC2) mengurangi lalu lintas email melalui port 25 oleh   default. Untuk menghindari timeout saat mengirim email melalui SMTP   titik akhir dari EC2, gunakan port yang berbeda (587 atau 2587) atau isi a    Permintaan untuk Menghapus Keterbatasan Pengiriman Email untuk melepas throttle.

Waspadalah bahwa ini mungkin sedikit ketinggalan jaman juga, sejauh keduanya Konsol Pengelolaan AWS dan bagian Masalah SMTP Amazon SES mengacu pada port alternatif yang lebih umum 465 dan 587 saja:

Anda mengirim ke Amazon SES dari instance Amazon EC2 melalui port 25 dan Anda tidak dapat mencapai batas pengiriman Amazon SES Anda atau Anda   menerima waktu menyendiri - Amazon SES EC2 menerapkan batas pengiriman default   pada email yang dikirim melalui port 25 dan koneksi keluar throttles jika Anda   mencoba melampaui batas tersebut. Untuk menghapus batas ini, kirimkan a    Permintaan untuk Menghapus Keterbatasan Pengiriman Email. Anda juga dapat terhubung   ke Amazon SES melalui port 465 atau port 587, keduanya tidak dicekik.


45
2018-06-25 19:44



Jika Anda menjalankan aplikasi Django dan tersangka Jawaban Steffen mungkin penyebabnya - di sini adalah tes lakmus cepat:

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

Mengirim email dari port 25 harus digantung. Mengirim email dari 587 harus dikirim dengan cepat.


1
2017-08-30 13:13