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 会做它的事情。
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 会做它的事情。