Python smtplib与每个连接发送多个消息

2 投票
1 回答
3590 浏览
提问于 2025-04-16 04:07

最近我在学习Python的smtplib这个SMTP客户端库,但我找不到关于支持PIPELINING协议的SMTP服务器的相关资料。
我是不是漏掉了什么?这个功能可能还没有实现吗?有没有其他的库支持PIPELINING?

谢谢

1 个回答

7

我是不是漏掉了什么?

很可能是的。

简单来说,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服务程序的配置项。

撰写回答