最近我正在研究用于python的smtplib smtp客户端库,但是我找不到对支持它的smtp服务器的PIPELINING协议的任何引用。 有什么我想念的吗?它还没有实现?启用PIPELINING的任何其他实现而不是smtplib?
由于
答案 0 :(得分:6)
有什么东西我不见了吗?
很可能。
简单地说PIPELINING
正在发送SMTP命令而不等待响应。它并不倾向于实现,因为它的好处是微不足道的,并且增加了错误状态的复杂性。
从您的评论中,听起来好像您担心只有一条消息将通过一个连接发送。这不是PIPELINING
。
smtplib
支持对多条消息使用相同的连接。您可以多次拨打sendmail
。 E.g。
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守护程序配置项。