2011-02-16 54 views
4

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

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

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

+0

PHP是客户端!它只是不会与服务器通话。 – rik 2011-02-16 22:04:32

+0

如果php是客户端,为什么我们需要sendmail程序? – Yosef 2011-02-16 23:10:09

回答

1

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

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

编辑:What exactly does an MTA do?

2

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

您可以使用支持SMTP的PEAR Mail包来解决此限制。

+1

谢谢,但我问为什么,而不是如何。(我使用Zend_Mail) – Yosef 2011-02-16 22:35:44

4

最有可能的:sendmail之前PHP的mail()存在,所以在* nix中的真正的精神:当它在CLI已经存在

为什么要重新创造功能?

3

要用手邮件过别的东西的原因是邮件是一个复杂的野兽最好推迟到更好的东西设计为可处理。

一个简单的情况是,当您将某些邮件发送给脱机服务器时。邮件服务器脱机是“可以的”,内置逻辑在邮件服务器的操作中重试消息发送。但是,如果您只是打开一个SMTP套接字并开始吠叫协议,并且失败了,那么您已经失去了您在邮件服务器上“免费”获得的排队功能。

邮件只是那些最好委托给那些古老的系统的东西之一,这些系统在多年的痛苦的互操作性测试和实现中具有所有的知识和细节。

0

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

This part of the sendmail tutorial is helpful。

0

它被称为“sendmail”的原因。几十年来,网络公司一直在使用它进行通信。无论你是否知道,邮件是如何发送的。 - 通过一个仅限于RFC协议的程序,用于格式化,打包并将数据传递到其他服务器。它可以作为坐在端口上的守护进程运行,也可以从在cmdline中调用的实例运行。这是一个简单的工具,而且是一个高效的工具。

-Gama XUL (* nix的家伙)

试图以比发送邮件的程序(如Web浏览器客户端或PHP语言MOD)以外的东西发送邮件会像试图削减带枪的东西。还有很多事情要做,而且有太多相互冲突的情况可能会导致这种情况发生。它只是没有为它设计,并不会有效运作。