最近我正在研究用于 python 的 smtplib smtp 客户端库,但我找不到任何对支持它的 smtp 服务器的 PIPELINING 协议(protocol)的引用。 有什么我想念的吗?可能还没有实现?除了启用 PIPELINING 的 smtplib 之外,还有其他实现吗?
谢谢
最佳答案
Is there something i'm missing?
很有可能。
简单地说,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)
最后更新
which is the max number of messages i can append "per-connection" ?
这因 SMTP 守护进程而异。 Exim 似乎默认为 1000。
do i have to do this synchronously or does smtplib eventually handle contemporary sendmail calls ?
对 sendmail
方法的调用将阻塞直到完成,您的调用将是连续的。
如果您需要并行化,那么您可能需要考虑线程、多处理或扭曲。有许多可能的方法。
您允许的并发连接数也可能是一个 SMTP 守护进程配置项。
关于Python smtplib 和每个连接的多条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3707945/