如何在Python中发送邮件:ssmtp vs smtplib

3
我需要在Debian Linux上发送电子邮件。如何发送?我在256MB的Linux盒子上运行我的服务器,我听说postfix和sendmail太过于复杂。最近我发现了ssmtp,它似乎是一个可执行文件,需要作为进程执行,并通过Python使用os模块调用。另外,Python已经提供了smtplib,它对我来说可以正常工作。使用ssmtp与Python的smtplib相比有什么优势?
3个回答

5
在Python程序中,没有任何优势。
ssmtp的唯一目的是在sendmail API中包装SMTP协议。也就是说,它提供了一个程序/usr/sbin/sendmail,该程序接受与完整版sendmail相同的选项、参数和输入(尽管大多数选项都无效);但在幕后,它不会处理电子邮件本身,而是将消息发送到SMTP服务器。这适用于需要存在sendmail程序的系统,例如它们不理解SMTP——例如,我认为旧版本的PHP有这个要求,即使在最近的版本中,配置PHP使用所谓的sendmail接口(即程序sendmail)可能仍然比直接使用SMTP更容易。(我已经有一段时间没有使用PHP了,我不确定当前的状态)
然而,在Python中情况恰好相反:您有一个内置库,使直接使用SMTP变得容易,而使用sendmail则需要调用subprocess模块,这有些笨拙,并且还非常依赖不属于Python的东西。因此,基本上没有理由不使用smtplib。

在我看来,ssmtp 似乎也允许您隐藏帐户凭据,并限制应用程序只能发送邮件。我有遗漏什么吗? - kberg

2

此外,postfix非常易于在“卫星”模式下安装,它的作用仅仅是排队和为您传递电子邮件。这比实现自己的电子邮件队列要容易得多。大多数不错的包管理系统都允许您以这种方式配置。


1

还有其他轻量级的SMTP发送器,比如msmtp,这是我喜欢的。

但对于256 Mb的机器来说,Postfix也很好用。像Postfix这样完整的MTA的好处在于它会保留消息并在目标服务器宕机时重试。使用smtplib和远程机器上的服务器,你的程序现在依赖于网络...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接