2

最近我正在研究 python 的 smtplib smtp 客户端库,但我找不到任何对支持它的 smtp 服务器的 PIPELINING 协议的引用。有什么我想念的吗?它可能尚未实施?除了启用了 PIPELINING 的 smtplib 之外,还有其他实现吗?

谢谢

4

1 回答 1

6

有什么我想念的吗?

很有可能。

简单地说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 守护程序配置项。

于 2010-09-14T12:30:02.240 回答