2012-03-01 20 views

回答

8

這三個選項並不完全在同一聯盟中,假設第一個意思是mail()函數。

使用mail()函數通常會調用本地郵件注入器,通常是由MTA提供的二進制程序,實際稱爲「sendmail」。 mail()的問題在於它是一個非直接的界面,其中有很多陷阱和陷阱沒有很好的記錄。這是因爲它模仿(IMO嚴重)調用Unix CLI mail命令。

你可以自己調用本地注入器,但是這種情況記錄的更不好。無論如何,你可以撥打mail(),因爲這是後者所做的。

但是,使用SMTP會帶來一系列問題。如果有本地MTA接受和轉發郵件,那麼這不是一個壞的解決方案。如果沒有,你將不得不找出你應該發送到哪個主機。這將要麼找出哪個外部主機應該做你的轉發,要麼自己做實際的MX查找。您還需要知道SMTP協議,並能夠出於任何原因處理拒絕服務。而且您必須決定如何處理重新嘗試發送的需求。

自己做SMTP還有一個問題,就是無法從發送電子郵件的原因中分離發送電子郵件。如果出現延遲或問題,您的頁面將顯示爲卡住。使用本地注入器將前一個問題交給MTA;你所做的一切就是排隊發送郵件。但是,您不必擔心重新發送等事情。

這三種解決方案也不能幫助您組裝消息,如豐富的內容,備用內容和附件。你必須自己做所有的事情(並添加正確的標題!)。

正常的建議是找到一個能爲你做所有事情的庫,它很健壯並且有一個體面的API。通常的是PHP郵件程序。這個庫的優點是它也可以完成所有的消息彙編,以及搞清楚如何完成交付。但它的主要優點是它只是發送消息,嘗試mail()和本地SMTP,甚至是遠程SMTP(如果必須的話)。一切都很透明。

+1

謝謝,我發現非常有幫助!我將研究PHP Mailer。 – dangerChihuahua007 2012-03-01 02:32:28

+1

非常有用的信息。我也很困惑,但現在我正在使用PHP梅勒。 – Abhijeet 2014-01-03 06:59:20

相關問題