php mail() 函式在本地開發機器上非常緩慢
背景:如果您出於開發目的設置了本地 apache 伺服器,您可能會遇到 sendmail 需要很長時間(至少一分鐘)才能發送電子郵件的問題。如果您嘗試調試您生成的電子郵件的問題,這將非常令人沮喪。
網際網路上有幾個論壇文章討論了這個問題。但是,就我有限的知識而言,沒有一個主題足夠詳細地描述了要做什麼。以下是對我有用的步驟:
- 使用以下命令查找您的主機名(以防您忘記它):
:~$ cat /hosts/hostname
myhostname
2)編輯文件
/etc/hosts
並確保第一行如下:
127.0.0.1 localhost.localdomain localhost myhostname
3)編輯 sendmail 配置文件(
/etc/mail/sendmail.cf
在 Ubuntu 中)並取消註釋該行#O HostsFile=/etc/hosts
重新啟動電腦。電腦現在應該啟動得更快,並且 mail() 函式應該幾乎立即返回。但是,除非您按照第 5 步操作,否則實際上不會發送電子郵件。
每當使用郵件功能時,您必須新使用 sendmail ‘-f’ 選項。例如:
mail('recipient@somewhere.com', 'the subject', 'the message', null, '-fsender@somewhere.com');
我對伺服器故障者的問題是:
可以進行哪些進一步的更改,以便我不必使用 sendmail -f 選項?雖然添加 -f 選項並不難,但當您的 CMS(例如 Drupal)在發送郵件時不使用 -f 選項時,就會出現問題。您需要破解一個核心模組才能添加此選項。
這對我有用:
- 安裝後綴
請參閱此處有關如何執行此操作的說明: https ://help.ubuntu.com/community/Postfix (它可能已經安裝,並且“sendmail”二進製文件實際上可能是後綴的別名)
- 請按照此處的說明進行操作:
http://lenss.nl/2009/01/making-php-mail-work-on-ubuntu-through-postfix/
mkfifo /var/spool/postfix/public/pickup
查找
sendmail
過程ps aux | grep mail
殺了它
kill <thepid>
重新開始
postfix
/etc/init.d/postfix restart
我認為您可以將“myorigin”參數設置為任何活動域名,例如您擁有的域名。
好吧,我知道這不是您要問的,但是您為什麼不嘗試 Postfix 或 Exim 呢?它們都可用於 ubuntu(Postfix 甚至是 Ubuntu 系統上的預設 mta),並且它們都提供了兼容的“sendmail”命令,效果很好。恕我直言,sendmail 有點過時了,通過更現代的 MTA,您將獲得更好的支持機會。