Подтвердить что ты не робот

Время ожидания Amazon EC2/SES SMTP

У меня возникла проблема при отправке писем с моего экземпляра EC2 с использованием SMTP на SES. По какой-то причине я получаю спорадические проблемы с таймаутом, когда я больше не могу обращаться к узлу SMTP. Важно отметить, что отправка через SES работает, вероятно, в 75% случаев.

Я начну с некоторых деталей. Моя учетная запись SES работает большую часть времени. Электронная почта отправителя была проверена, и мои лимиты были увеличены до 10k/day, 5 писем в секунду. У меня создается впечатление, что я получу предельную ошибку, если бы это было связано с моими ограничениями. Для моей конфигурации SMTP я использую posfix w/TLS. Я опубликовал очень похожий пост на официальных форумах AWS SES, но пока не имел успеха. Информация для этого сообщения находится внизу этой публикации.

Вот пример неудачи с утра. Все команды, которые я запускал ниже, запускались из экземпляра EC2, с которого я пытаюсь отправить почту. Извините за пост нового размера, я просто хочу убедиться, что все включено.

Письмо, отправленное мне самому, не доставлялось:

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)

И когда я увидел сбой, я попытался подключиться к узлу электронной почты через порт 25. Я не мог подключиться:

[email protected] sbin# telnet email-smtp.us-east-1.amazonaws.com 25  
Trying 174.129.28.151...  
^C

Через несколько минут мое отложенное письмо, наконец, прошло:

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

И теперь я могу подключиться к порту 25:

[email protected] 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  
^]

Для ударов я решил посмотреть конечную точку узла SES. Оказывается, это просто ELB cname, а записи A указывают на интерфейсы в нескольких AZ.

[email protected] 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

Я попробовал отправить другое сообщение, и оно не сработало. На этот раз я пропустил каждый из адресов A записей, возвращаемых SES cname. Я не мог связаться ни с одним из них. За это время я также попытался подключиться к моей локальной машине (не к моему экземпляру EC2), и она работала нормально.

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

После ожидания около 30 секунд я попытался снова, на этот раз он сработал.

[email protected] 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>

Как я уже говорил, я опубликовал очень похожую статью на форуме AWS SES. Сообщение можно найти ниже.

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

Кроме того, похоже, что я не одинок, так как нашел этот другой пост на форуме SES, похоже на ту же проблему.

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

Я думал, что может быть какое-то ограничение EC2 SMTP, поэтому я заполнил форму запроса "отправка электронной почты от EC2", но мне кажется глупым, поскольку я использую услугу Amazon, в отличие от третьей стороны. До сих пор я ничего не слышал от Amazon после заполнения формы.

Есть ли у кого-нибудь идеи? Спасибо заранее.

4b9b3361

Ответ 1

Таким образом, очевидно, что EC2 имеет свои собственные ограничения. Я предположил (неправильно), что доступ к SES для производства также означает ослабленные ограничения SMTP от EC2, но поскольку они представляют собой два совершенно отдельных продукта, я думаю, что это не так.

Но, как я заявил в последнем абзаце моего сообщения, вы можете Запрос на удаление ограничений отправки электронной почты, чтобы эти ограничения были подняты. Я сделал это, и проблема была остановлена ​​(потребовалось около 5 часов, чтобы удалить мои лимиты).


Update

Регулирование EC2 документировано в Подключение к конечной точке SMAS Amazon SES и фактически ограничено портом 25, поэтому альтернативное и немедленное решение просто использует порт 587 вместо этого ( немного неудачно, что несколько официальных примеров SES используют порт 25):

Важно

Эластичное вычислительное облако (EC2) дросселирует почтовый трафик через порт 25 на по умолчанию. Чтобы избежать тайм-аутов при отправке электронной почты через SMTP конечной точки от EC2, используйте другой порт (587 или 2587) или заполните Запрос на удаление указателей отправки электронной почты, чтобы удалить дроссель.

Остерегайтесь, что это может быть немного устаревшим, а также AWS Management Console и раздел Проблемы с SMTP в Amazon SES относятся к более общим альтернативным портам 465 и 587:

Вы отправляете на ASAS Amazon из экземпляра Amazon EC2 через порт 25, и вы не можете достичь своих ограничений по отправке SAS Amazon, или вы время ожидания приема - Amazon SES EC2 налагает лимиты отправки по умолчанию по электронной почте, отправленной через порт 25, и отключает исходящие соединения, если вы попытаться превзойти эти пределы. Чтобы удалить эти ограничения, отправьте Запрос на удаление ограничений отправки электронной почты. Вы также можете подключиться к SAS Амазонки через порт 465 или порт 587, ни один из которых не дросселируется.

Ответ 2

Если вы используете приложение Django и подозреваете ответ Steffen, это может быть причиной - вот быстрый тест лакмусовой бумажки:

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

Отправка электронной почты с порта 25 должна зависать. Отправка сообщения электронной почты с 587 должна быть отправлена ​​быстро.