最近我正在研究 python 的 smtplib smtp 客户端库,但我找不到任何对支持它的 smtp 服务器的 PIPELINING 协议的引用。有什么我想念的吗?它可能尚未实施?除了启用了 PIPELINING 的 smtplib 之外,还有其他实现吗?
谢谢
有什么我想念的吗?
很有可能。
简单地说PIPELINING
就是发送 SMTP 命令而不等待响应。它往往不会被实施,因为好处是微不足道的,而且它增加了错误状态的复杂性。
从您的评论看来,您似乎担心通过一个连接只会发送一条消息。这不是PIPELINING
。
smtplib
支持对多条消息使用相同的连接。您可以sendmail
多次调用。例如
s = smtplib.SMTP("localhost")
s.sendmail("foo@bar.baz",["bar@foo.baz"],message1)
s.sendmail("foo@bar.baz",["baz@foo.baz"],message2)
最终更新
我可以附加“每个连接”的最大消息数是多少?
这在 SMTP 守护程序之间有所不同。Exim 似乎默认为 1000。
我必须同步执行此操作还是 smtplib 最终会处理当代 sendmail 调用?
对该sendmail
方法的调用将阻塞直到完成,您的调用将是顺序的。
如果您需要并行化,那么您可能需要查看线程、多处理或扭曲。有许多可能的方法。
允许的并发连接数也可能是 SMTP 守护程序配置项。