【问题标题】:Why does PHP mail() require a mail program like sendmail/postfix/etc. for sending emails?为什么 PHP mail() 需要像 sendmail/postfix/etc 这样的邮件程序。发送电子邮件?
【发布时间】:2017-08-10 05:51:11
【问题描述】:

为什么 PHP mail() 函数需要像 sendmail/postfix/etc 这样的邮件程序。用于发送电子邮件?

我问是因为发送电子邮件是客户端操作,而不是需要运行服务器的操作。

创建原生 PHP 邮件功能而不需要安装 sendmail/postfix/etc 有什么复杂的?具有过多功能的程序作为服务器可以获取请求而不仅仅是作为客户端发送电子邮件?

【问题讨论】:

  • PHP 是客户端!它只是不与服务器通信 SMTP。
  • 如果php是客户端,为什么需要sendmail程序?

标签: php email


【解决方案1】:

很可能:sendmail 早于 PHP 的 mail(),所以本着 *nix 的真正精神:

当 CLI 上已经存在功能时,为什么要重新创建它?

【讨论】:

  • 因为 sendmail 服务器而不仅仅是客户端
【解决方案2】:

您希望将邮件交给其他东西的原因是邮件是一个复杂的野兽,最好将其推迟到更好地设计来处理它的东西。

一个简单的例子是当您将某些东西邮寄到离线的服务器时。邮件服务器离线是“可以的”,在邮件服务器的操作中内置了重试消息发送的逻辑。但是,如果您只是打开一个 SMTP 套接字并启动吠叫协议,但它失败了,那么您就失去了通过邮件服务器“免费”获得的排队功能。

邮件只是那些最好委托给那些经过多年痛苦的互操作性测试和实施而将所有知识和细节编码到其中的古老系统的东西之一。

【讨论】:

    【解决方案3】:

    PHP 本身并不发送邮件,而是委托另一个程序为它发送邮件。

    您可以改用支持 SMTP 的 PEAR Mail 包来绕过此限制。

    【讨论】:

    • 谢谢,但我问的是为什么而不是如何。(我使用 Zend_Mail)
    【解决方案4】:

    原因是因为mail() 函数不是MTA,只是实际 MTA 的“编码器”。

    为什么不呢?我认为仅使用 PHP 实现一个体面且安全的 MTA 设置是不切实际的。

    编辑:What exactly does an MTA do?

    【讨论】:

      【解决方案5】:

      当邮件服务器将电子邮件转发(路由)到另一台服务器时,它就像客户端一样使用 SMTP 转发电子邮件。客户端部分称为邮件传递代理 (MDA),通常是一个独特的软件。

      这个part of the sendmail tutorial 很有帮助。

      【讨论】:

        【解决方案6】:

        它被称为“发送邮件”是有原因的。数十年来,Networks 一直使用它进行相互通信。不管你是否知道,这就是邮件的发送方式。 ——通过一个限制在 RFC 协议中的程序,旨在对数据进行格式化、打包和传送到……其他服务器。它可以作为位于端口上的守护程序运行,也可以从在 cmdline 调用的实例中运行。这是一个简单且高效的工具。

        -Gama Xul (*尼克斯家伙)

        尝试使用邮件发送程序以外的其他东西(如网络浏览器客户端或 PHP 语言模块)发送邮件就像试图用枪切东西一样。那里还有很多事情要做,太多的冲突条件可能会导致它挂掉。它只是不是为它而设计的,因此无法有效地运行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-19
          • 2011-03-08
          • 2013-03-17
          • 2012-07-24
          • 1970-01-01
          • 2018-05-05
          相关资源
          最近更新 更多