PHP的mail
函數似乎在乾淨的系統上傳遞郵件,沒有明顯的配置由管理員或網站管理員完成(在php.ini
等沒有SMTP配置)。 mail
函數如何將郵件傳遞到遠程服務器?PHP的`mail`如何工作?
回答
在* nix上調用sendmail
二進制文件,然後使用郵件配置路由電子郵件。在Windows上,它發送到SMTP服務器。在這兩種情況下,系統管理員都會設置郵件系統。
感謝您回答我問的問題。我不確定PHP是否自己聯繫遠程服務器並處理SMTP,或者是否將該任務交給了本地服務器上的MTA。另外,你知道爲什麼這個問題被降低了嗎?我想很多人只是誤解了它。它似乎符合該網站的範圍(由[FAQ](http://stackoverflow.com/faq)定義)。 – 2012-08-04 22:26:26
@Tom:人們已經注意到了措辭而不是問題。 – 2012-08-04 22:33:19
我修改了問題以幫助解決問題。我不明白什麼是「含糊,模糊,不完整,過於寬泛或修辭」。我試着在PHP聊天室中詢問,但沒有主持人在那裏,或沒有人回覆。有沒有更好的地方瞭解該網站? – 2012-08-04 22:42:36
實際上,它確實不是那麼可靠,除非底層的sendmail
或其他配置正確。
亞馬遜SES比您使用的任何服務器都擁有更好的服務器,並且獲得郵件的次數超過mail()
。
你不應該使用mail()
的真正原因是因爲你的服務器的IP地址可能完全不知道郵件服務,比如GMail,Yahoo等,並且它很可能被標記爲垃圾郵件。爲什麼它被標記爲垃圾郵件?因爲mail()
是非常容易和簡單的利用垃圾郵件的目的。
這不是真的回答這個問題,它是如何工作的。我使用SES做其他事情。這只是想知道它是如何在沒有配置的乾淨安裝上工作的,並不是爲什麼它被標記爲垃圾郵件或我應該使用什麼。不過謝謝你的回答。 sendmail, – 2012-08-04 22:24:47
。 /會話。 – David 2012-08-05 03:58:29
mail()使用sendmail,它使用DNS來查找目標域的MX記錄並直接發送到那裏。而已。
由於目標服務器可能不知道您的IP地址,特別是如果它是NAT,它可能被標記爲垃圾郵件。
您可以修改您的配置以使用不同的(合法廣告已知)smtp服務器充當中介。
您可以檢測它如何工作如下。
首先方法
$ ltrace php -r "mail('[email protected]', 'Test', 'Hello world');" 2>&1 | grep sendmail
memcpy(0x095ea168, "sendmail_from", 14) = 0x095ea168
memcpy(0x095ea1e0, "sendmail_path", 14) = 0x095ea1e0
popen("/usr/sbin/sendmail -t -i ", "w") = 0x0977c7c0
從上述命令的結果可以看出,在popen()
函數打開的/usr/sbin/sendmail -t -i
的過程。
$ ls -l /usr/sbin/sendmail
... /usr/sbin/sendmail -> exim4
所以sendmail
是符號鏈接到exim4
因此sendmail -t -i
調用exim4 -t -i
。
而且在exim4
手冊頁面,您可以閱讀有關這些選項-t -i
:
$ man exim4 | grep ' -t -i'
-ti This option is exactly equivalent to -t -i. It is provided for compatibility with Sendmail.
方法二
安裝snoopy和運行:
# grep snoopy /var/log/auth.log | tail
... php -r mail('[email protected]', 'Test', 'Hello world');
... /usr/sbin/sendmail -t -i
... /usr/sbin/exim4 -Mc 1YxxYn-0006a7-Nw
... /usr/sbin/exim4 -t -oem -oi -f <> -E1YxxYn-0006a7-Nw
... /usr/sbin/exim4 -Mc 1YxxYn-0006aB-Oj
上述命令的結果顯示已執行的命令的順序。
- 1. PHP的mail BCC不工作
- 2. php mail()腳本不工作
- 3. PHP的mail()不工作,Windows 2003,IIS SMTP
- 4. php mail()函數不能正常工作
- 5. Mail :(); PHP不工作在消息
- 6. php mail()函數在Wordpress中工作嗎?
- 7. PHP mail()函數已停止工作
- 8. Php mail:如何發送html?
- 9. Grails Mail插件不工作
- 10. PHP的mail()
- 11. PHP Pear Mail不能作爲對象工作
- 12. PHP的mail()函數使用不工作的PHPMailer
- 13. laravel Mail :: failures()函數是如何工作的?
- 14. 設置Mail(PHP)
- 15. Mail form trough php
- 16. php mail()函數
- 17. PHP PEAR Mail'='
- 18. PHP Mail Postfix
- 19. Php ini_set mail smtp
- 20. php mail multiple recepients
- 21. php mail()error_get_last();
- 22. wp_mail vs php mail()
- 23. PHP MAIL CHECKBOX $ POST
- 24. header function mail()php
- 25. 無法讓PHP Mail()函數正常工作
- 26. PHP mail()函數無法在QNAP上工作
- 27. 聯繫頁面php mail()不起作用
- 28. php Mail()函數不起作用
- 29. 縫mail沒有在JBoss AS工作6
- 30. java mail CC和BCC不工作
爲什麼要完成該配置?除非你的意思是將郵件發送給網站管理員,否則網站管理員無法配置任何東西。 – 11684 2012-08-04 20:21:47
你問的是錯誤的問題 - PHP中的mail()函數沒有錯 - 它不是不可靠的。問題是郵件的內容和分發。更好的問題是'我怎樣才能避免我的郵件以垃圾郵件文件夾結尾?'。 – Repox 2012-08-04 20:22:32
他說'可靠',但這真的不是一個問題...這裏 – Alex 2012-08-04 20:26:05