簡體   English   中英

為什么我不應該使用PHP的mail()函數?

[英]Why shouldn't I use PHP's mail() function?

在PHP中發送電子郵件消息時的一般意見是不要使用PHP的內置mail()函數,而是使用庫。

我想知道的是在庫或擴展中使用mail()的實際原因和缺陷。 例如,標准mail()調用中未包含的常用標頭。

引用

PHP mail()函數的缺點

在某些情況下,通過PHP mail()沒有收到收件人,盡管它是由WB發送的,沒有任何錯誤消息。 下面列出了該問題的最常見原因。

  • 郵件標題或內容格式錯誤(例如Windows / Unix之間的換行符差異)
  • 未在服務器上安裝或配置sendmail(php.ini)
  • recipeint的郵件提供者不允許通過PHP mail()發送mail() ; 常見垃圾郵件保護

標頭或內容格式的錯誤可能導致郵件被視為垃圾郵件。 在最好的情況下,此類郵件將轉移到收件人收件箱的垃圾郵件文件夾或發送回發件人。 在最壞的情況下,這些郵件被刪除而沒有任何評論。 如果未安裝或未配置sendmail,則根本不能發送郵件。

免費郵件提供商(如GMX)通常會拒絕通過PHP函數mail()發送的mail() 通常這些郵件被刪除而沒有收件人的任何信息。

PHP的mail()被稱為亂碼並且運行緩慢。 我不能從個人經驗中說出這個,因為我從未使用它,因為,像你一樣,我總是被建議反對它。 如果你看一下PHP手冊中關於mail()條目的注釋,你可以看到人們對它的一些問題(特別是帶頭文件)。

它絕對不適合發送任何大量的電子郵件,因為根據手冊本身,

值得注意的是mail()函數不適合循環中的大量電子郵件。 此功能為每封電子郵件打開和關閉SMTP套接字,效率不高。

要發送大量電子郵件,請參閱»PEAR :: Mail和»PEAR :: Mail_Queue包。

AFAIK,無論您發送的郵件數量多少,為您發送的每封郵件打開和關閉套接字都絕對不可取(性能方面)。

基本上,它是一個有效的功能,但不是很好,並且被許多更好的庫黯然失色。

重要的不僅是mail()函數,還有你使用的smtp服務器。 我使用了三個不同的smtp服務器與php:postfix,qmail,sendmail。

根據我的經驗,postfix是最容易使用php mail()的人,但即使是postfix也有一些問題。 你會遇到小錯誤。 它可能是“收件人”收到正確結構化的電子郵件和收到損壞的電子郵件的“密件抄送”收件人之類的東西。 你會失去很多時間來弄清楚這些錯誤。 並且您的修復程序將使您的代碼與其他smtp服務器無法正常工作。

問題在於處理電子郵件標題和PHP,但遺憾的是,這項工作做得不好。 最近我切換到“PHP Mailer”庫。 在我們的網站上,我們有兩個smtp服務器,一個帶有postfix,另一個帶有qmail。 “PHP Mailer”與它們一起工作,沒有其他配置。

最大的原因是mail()可以直接與郵件服務器通信,如果你在清理輸入時不知道自己在做什么,黑客可能會欺騙你的郵件服務器發送郵件而不是你想要的郵件。 大多數第三方圖書館都有更好的衛生條件(或更好的API)來幫助防止這種情況發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM