为什么PHP mail()需要sendmail / postfix /等邮件程序。发送电子邮件?

时间:2011-02-16 21:54:41

标签: php email

为什么PHP mail()函数需要sendmail / postfix /等邮件程序。发送电子邮件?

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

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

6 个答案:

答案 0 :(得分:4)

最有可能的是:sendmail在PHP的mail()之前存在,所以真正的精神是* nix:

为什么在CLI上已存在功能时重新创建功能?

答案 1 :(得分:3)

你想把邮件发送到其他东西的原因是Mail是一个复杂的野兽,最好推迟到更适合处理它的东西。

一个简单的例子就是当您将某些内容邮寄到离线的服务器时。邮件服务器脱机是“OK”,内置逻辑可以在邮件服务器的操作中重试邮件发送。但是如果你只是打开一个SMTP套接字并开始咆哮协议,它就会失败,那么你就失去了使用邮件服务器“免费”获得的排队功能。

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

答案 2 :(得分:2)

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

您可以使用PEAR Mail软件包来代替此限制,该软件包具有SMTP支持。

答案 3 :(得分:1)

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

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

编辑:What exactly does an MTA do?

答案 4 :(得分:0)

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

part of the sendmail tutorial非常有用。

答案 5 :(得分:0)

出于某种原因,它被称为“sendmail”。网络几十年来一直用于互通。无论你是否知道,这就是邮件的发送方式。 - 通过一个仅限于RFC协议的程序,旨在将数据格式化,打包并传送到其他服务器。它可以作为守护程序在端口上运行,也可以在cmdline上调用的实例上运行。这是一个简单的工具,也是一个有效的工具。

-Gama Xul (* nix guy)

尝试使用除邮件发送程序之外的其他内容(如Web浏览器客户端或PHP语言模块)发送邮件就像试图用枪切割东西一样。还有更多的事情发生在那里,太多的冲突条件可能会使它挂起。它只是不是为它设计的,不会有效运作。