多次成功连接后,Python套接字SMTP连接速度很慢

多次成功连接后,Python套接字SMTP连接速度很慢

我有一个脚本,用于通过电子邮件向客户发送 PDF 文件,现在遇到了一个问题:当我启动该脚本时,它会发送最多三个 PDF 文件,然后每封后续电子邮件都需要 1-2 分钟才能发送出去。我可以暂停该脚本,几分钟后重新开始,结果还是一样,三个 PDF 文件发送出去,其余的 PDF 文件都发送不出去。

我几乎可以肯定,问题已经缩小到服务器问题,但我不知道可能是什么问题。我有两台服务器,一台来自旧的 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

如果我在 python 进程尝试发送时对其进行 strace 运行,我会得到以下结果:

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

我现在有一个测试脚本,它只发送一封电子邮件,我注意到我也可以运行三次,然后发送就会花很长时间。我认为这是服务器上的某种速率限制,但我不知道现在该去哪里找。

答案1

EC2限制 25 端口流量。您可以提交请求以取消电子邮件发送限制,也可以使用亚马逊 SES发送您的电子邮件。

SES 成本每千条消息 0.10 美元,而且它是一种托管服务,可以减少维护问题。我可能会选择这种方式。

答案2

您可以通过单个 SMTP 连接发送多封电子邮件。

相关内容