Postfix

Postfix + Php Mail() VS Postfix + SMTP

  • December 4, 2014

大多數 CMS(例如 Joomla)都是php mail()預設提供的,SMTP如果我們願意,可以選擇將其更改為。我將在 Debian 7 上的同一個 VPS 中設置網路伺服器和郵件伺服器(Postfix)。我想了解的是:

  1. **傳遞信譽:**使用 php mail() 與 SMTP 對傳遞率有何影響?據我了解,Postfix 在發送電子郵件時與 Internet 上的其他伺服器通信時將使用 SMTP 協議,因此可以安全地假設電子郵件是通過 php mail 發送到 postfix 還是從 localhost 發送到 smpt 無關緊要? 這兩種方法中的任何一種是否會影響電子郵件聲譽,即使是很小的方式?
  2. **性能負載:**發送電子郵件時,php 郵件和 SMTP 之間是否存在性能差異?比如說,如果我要發送 10,000 封電子郵件,哪種方法會佔用最多的資源(或時間)?我的假設是兩者都可能需要一些時間,例如:php mail 用於編譯帶有標題等的電子郵件,以及 SMTP 用於每次建立連接。哪一個消耗的伺服器資源最多?
  3. **安全問題:**當我搜尋兩者之間的區別時,許多網站都提到了 php 郵件的安全問題,因為黑客可以上傳 php 腳本來發送垃圾郵件。但我也可以看到 SMTP 的另一個安全問題,因為 SMTP 使用者名和密碼以文本形式儲存在配置文件中,這也不安全。既然這兩種方法都存在安全問題,那麼一種方法在任何方面都比另一種更重要嗎?
  4. **偏好:**如果我能夠在我的伺服器上設置 phpmail 和 SMTP,我是否應該出於任何原因優先使用其中一個?我的意思是,如果我可以在我的伺服器中使用 SMTP,那麼由於上述幾點涵蓋的各種原因,我是否應該嘗試使用 SMTP 而不是 phpmail?

背景:我的機器將是一個簡單的網路伺服器,它使用 postfix 僅用於從 Joomla 發送電子郵件、新聞通訊和來自各種服務的根電子郵件。

**傳遞信譽:**使用 php mail() 與 SMTP 對傳遞率有何影響?據我了解,Postfix 在發送電子郵件時與 Internet 上的其他伺服器通信時將使用 SMTP 協議,因此可以安全地假設電子郵件是通過 php mail 發送到 postfix 還是從 localhost 發送到 smpt 無關緊要? 這兩種方法中的任何一種是否會影響電子郵件聲譽,即使是很小的方式?

都沒有關係。Postfix 可以通過 mail() 和 SMTP接收電子郵件。處理後,postfix 將通過 SMTP發送。

性能負載:發送電子郵件時,php 郵件和 SMTP 之間是否存在性能差異?比如說,如果我要發送 10,000 封電子郵件,哪種方法會佔用最多的資源(或時間)?我的假設是兩者都可能需要一些時間,例如:php mail 用於編譯帶有標題等的電子郵件,以及 SMTP 用於每次建立連接。哪一個消耗的伺服器資源最多?

對其進行基準測試!我沒有這方面的任何數據。


這裡 mail() 和 SMTP 涉及哪些過程?

在 mail() 命令中,PHP 呼叫 sendmail 命令,程序將您的電子郵件放在 maildrop 隊列目錄中的文件中。Pickup daemon 掃描該目錄,然後將電子郵件移至 cleanup daemon。

在 SMTP 一中,PHP 通過 SMTPd 創建到您的後綴伺服器的連接。完成 SMTP 儀式後,SMTPd 將檢查電子郵件是否允許。如果電子郵件允許,它將把它傳遞給清理守護程序。

來源:postfix官方文件


安全問題:當我搜尋兩者之間的區別時,許多網站都提到了 php 郵件的安全問題,因為黑客可以上傳 php 腳本來發送垃圾郵件。但我也可以看到 SMTP 的另一個安全問題,因為 SMTP 使用者名和密碼以文本形式儲存在配置文件中,這也不安全。既然這兩種方法都存在安全問題,那麼一種方法在任何方面都比另一種更重要嗎?

正如@Tutul 在另一個答案中所說,您可能希望一些垃圾郵件腳本使用 mail() 發送垃圾郵件。是的,這是在 php 中阻止郵件命令的考慮因素之一。

但是,有一個原則:一旦有人成功地將腳本放置在您的網路和郵件伺服器中,他就可以使用 PHP 通過 mail() 和 SMTP 發送電子郵件

在 php 本身中,沒有任何保護措施可以限制垃圾郵件發送者可以呼叫多少 SMTP 連接或 mail()。放置防線的地方之一是 MTA(後綴)。不幸的是,您不能限制從 mail() 命令呼叫的傳入郵件。但是,您可以限制從 SMTP 連接可以發出多少發送請求。Policydpostfwd可以幫助 postfix 限制它。

注意:以上解釋是關於接收郵件時的節流過程。當然,您可以在發送電子郵件時對其進行限制。例如,您將每分鐘 20 封電子郵件限制為 @gmail.com,以避免 GMAIL 黑名單守護程序阻止您。請參閱有關Postfix 性能調整的文件

最後說明

恕我直言,我更喜歡通過 SMTP 發送電子郵件。您可以使用 MTA 作為垃圾郵件爆發的額外保護。正如@Sanmain 在另一個答案中所說,您可能必須在 PHP 中處理另一個郵件隊列:)

引用自:https://serverfault.com/questions/639622