Python API 调用中的 SMTP 连接太慢

Python SMTP connection is too slow in API call

Python 中的 smtplib 有一个小问题。我目前正在使用 Flask 构建一个 API 并且我正在经历身份验证阶段。理论非常简单:我创建了一个路由,通过 json 接受 POST 请求,其中包含用户名、密码和电子邮件地址。 每次创建新用户时,内部逻辑都会向给定的电子邮件发送一个基本响应,其中包含用于激活帐户的密码。一切都很好,但是请求平均需要 7.5 秒,其中大部分是实际的电子邮件传送。

我在每次创建新用户时都会触发的函数中以这种方式使用 smtp 库:

    def func(*args, **kwargs):  # the arguments are email address from/to and the actual message
        with smtplib.SMTP_SLL('****.mail.com') as smtp:
            smtp.login(ADDRESS, PASSWORD)
            smtp.sendemail(msg)

我的问题是:在函数外部将 SMTP_SSL 连接分配给对象是否可能并且可能更快,以便连接始终打开:

    server = smtplib.SMTP_SSL('****.mail.com')
    server.login(ADDRESS, PASSWORD)

    def func(*args, **kwargs):  # the function doesn't connect everytime
        server.sendemail(msg)

我估计实际连接、验证和登录占用的时间最长。 此外,当网站的 Web 服务器为 运行 时,保持 SMTP 连接始终打开可能会出现哪些安全问题?

非常感谢

类似的问题已在

中得到解决

How to send bulk emails through SMTP without establising a connection for every email?

总的来说,我认为这是不明智的。如果您要连接到您的 ISP 的 SMTP 服务器,他们将不会喜欢永久占用一个套接字。如果握手需要那么长时间,可以合理地猜测他们已经有一些负载了。

此外,一段时间不活动后,您可能会断开连接。如果你按照你的建议去做,异常处理也会变得棘手。

根据您的环境,如上述讨论中所建议,您可以将 Postfix 设置为空客户端,并启用连接缓存。这将处理毛茸茸的位到一个专为处理它而设计的软件。

然后您的网络服务器将使用 smtplib 连接到此空客户端并发送您的电子邮件。这个交易几乎是即时的,Postfix 会做它的事情。