发送邮件与 SMTP

Posted

技术标签:

【中文标题】发送邮件与 SMTP【英文标题】:Sendmail vs SMTP 【发布时间】:2010-11-22 11:12:46 【问题描述】:

生产中的 Rails 应用程序应该使用 smtp 或 sendmail 发送邮件吗?

【问题讨论】:

smtp 是协议,不是程序。 【参考方案1】:

SMTP 是几乎所有 Internet 主机用来发送邮件的协议。 sendmail 使用此协议。 Sendmail 决定将您的消息发送到哪里以及如何发送。

一些邮件程序(今天的大多数)将直接连接到邮件服务器并向其发送 SMTP。然而,“传统”方法——可以说是更好的方法——是让 sendmail 来做。

这有两个原因:1) 在 UNIX 中,几乎所有与 sendmail 相同的程序都被设计为直接替代(例如,包括 Postfix 和 Exim);和 2) sendmail 或其替代品旨在处理邮件,仅此而已 - 通过使用 sendmail,您不必设计 SMTP 客户端。

用于 UNIX 的 Mutt 电子邮件客户端是一种电子邮件客户端,它仍然拒绝将 SMTP 直接与邮件服务器通信。 wiki 上有一个好的(技术)描述。

如果您可以选择(无论如何在 UNIX 上)直接使用 SMTP 或使用 sendmail,请使用 sendmail - 特别是在服务器上。

【讨论】:

【参考方案2】:

正如 NDP 已经提到的,它们都可以正常工作 - 也就是说,如果您的消息量不超过一定数量。

例如,如果您的应用程序可以与本地 SMTP 服务器(IP 127.0.0.1,端口 25)或同一子网中的服务器(即,通过低延迟链接)进行 SMTP 通信,并且该服务器可以在邮件排队之前不要使用任何内容过滤器,您通常可以在更短的时间内通过 SMTP 提交更多邮件。

一个有用的 Postfix 链接可能是General Mail Delivery Performance Tips - 请注意引用的说法

通过 SMTP 而不是 /usr/sbin/sendmail 提交邮件。

但是,在现代硬件上,如果您不打算每秒提交超过 10 条消息,您应该不会注意到任何实际差异。

【讨论】:

【参考方案3】:

您的问题不正确 - SMTP 代表简单邮件传输协议,而 sendmail 是使用此协议发送邮件的软件。

使用发送邮件。

【讨论】:

选项#1:打开与 SMTP 服务器的连接,直接使用 SMTP 协议。打开 #2:运行“发送邮件”命令。【参考方案4】:

它们都可以正常工作。 Action Mailer 两者都支持。

我已经在几个项目中成功使用了 SMTP。我的感觉是这有点“标准”,但我可能错了。

我没用过sendmail。我担心的是,如果您不直接在 Unix/Linux 上进行开发,那么在开发环境中进行设置可能会更加困难。您可以直接与任何 SMTP 服务器对话——甚至是远程服务器——您必须在 rails 机器上安装 sendmail 才能使其工作。

我在使用电子邮件时遇到的主要问题是异步发送消息。如果没有本地 SMTP 服务器,本地 sendmail 实例的性能会更高。

无论哪种方式,如果您决定选择错误,它看起来很容易切换。

【讨论】:

以上是关于发送邮件与 SMTP的主要内容,如果未能解决你的问题,请参考以下文章

smtplib与email模块(实现邮件的发送)

强制 mandrill API 发送邮件,而不是 django 与 smtp

与 Outlook 相比,使用 SMTP 类发送电子邮件的电子邮件大小奇怪增加

Python使用SMTP模块email模块发送邮件

Python使用SMTP模块email模块发送邮件

通过 SMTP 发送邮件?