2011-02-16 53 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)以外的東西發送郵件會像試圖削減帶槍的東西。還有很多事情要做,而且有太多相互衝突的情況可能會導致這種情況發生。它只是沒有爲它設計,並不會有效運作。

相關問題