Сокет Python медленно подключается для SMTP после нескольких успешных подключений

У меня есть сценарий, который отправляет PDF-файлы по электронной почте нашим клиентам, и у меня возникла проблема, когда при запуске сценария я он отправляет до трех PDF-файлов, а затем на отправку каждого последующего электронного письма уходит 1-2 минуты. Я могу остановить сценарий и начать заново через несколько минут, допуская тот же результат, когда три выходят, а остальные - патока.

Я сузил его до проблемы с сервером, почти наверняка, но я не знаю, что это могло быть. У меня есть два сервера, один из старой учетной записи AWS, и с этого можно быстро отправлять электронные письма снова и снова. Новый сервер учетных записей AWS может делать три. Когда я прерываю программу, я знаю, что она застряла при подключении, потому что это трассировка:

Traceback (most recent call last):
  File "./test_reports.py", line 202, in <module>
    send_email(advertiser_email, sales_email, emailSubject, emailBody, fname, sendEmail=True)
  File "./test_reports.py", line 158, in send_email
    smtp = smtplib.SMTP('email-smtp.us-east-1.amazonaws.com')
  File "/usr/lib64/python3.5/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib64/python3.5/smtplib.py", line 335, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/lib64/python3.5/smtplib.py", line 306, in _get_socket
    self.source_address)
  File "/usr/lib64/python3.5/socket.py", line 702, in create_connection
    sock.connect(sa)
KeyboardInterrupt

Если я запускаю strace в процессе python, пока он пытается отправить, я получаю следующее:

connect(4, {sa_family=AF_INET, sin_port=htons(25), sin_addr=inet_addr("54.243.225.221")}, 16)

Теперь у меня есть тестовый сценарий где он отправляет только электронное письмо, и я заметил, что могу запустить его еще три раза, прежде чем его отправка займет целую вечность. Я думаю, что это какое-то ограничение скорости на сервере, но я не уверен, где теперь искать.

0
задан 8 June 2017 в 21:32
2 ответа

EC2 ограничивает трафик порта 25 . Вы можете отправить запрос на снятие ограничений на отправку электронной почты или использовать Amazon SES для отправки своих писем.

SES стоит 0,10 доллара за тысячу сообщений , и это управляемая услуга, что может уменьшить проблемы с обслуживанием. Я бы, наверное, пошел этим путем.

0
ответ дан 5 December 2019 в 08:03

Вы можете отправлять несколько писем через одно соединение SMTP.

0
ответ дан 5 December 2019 в 08:03

Теги

Похожие вопросы