PHP 內建的 mail() 函數雖然方便,但實際部署時常因環境配置不當導致發送失敗。本文將從伺服器元件安裝、主機名設定、PHP 參數調整三個維度,提供一套完整的排查流程與解決方案,助你快速恢復郵件發送功能。
mail() 函數依賴系統層面的 sendmail 元件。若伺服器未安裝,請執行:
yum install sendmail
安裝完成後,務必將主機名設定為合法域名格式(如 example.com),否則 sendmail 重啟會極其緩慢:
hostname example.com
檢查服務狀態並啟動:
service sendmail status
service sendmail start
編輯 PHP 設定檔(以 LNMP 環境為例):
vi /usr/local/php/etc/php.ini
搜尋 ;sendmail_path =,取消註解並修改為:
sendmail_path = /usr/sbin/sendmail -t -i
核心發現:預設值常帶有 -f 參數(如 sendmail_path = /usr/sbin/sendmail -t -i -f),此參數會導致 mail() 函數失效。移除 -f 後即可恢復正常。
修改完成後重啟 PHP 進程:
service php-fpm restartservice httpd restartservice php restart建立測試檔 test_mail.php:
<?php
$to = 'your_email@example.com';
$subject = '測試郵件標題';
$message = '測試郵件內容,若收到此郵件表示 mail() 函數已成功啟用!';
$result = mail($to, $subject, $message);
echo $result ? 'true (發送成功)' : 'false (發送失敗)';
?>
瀏覽器訪問該檔案,若輸出 true 即代表配置成功。
/var/log/maillog 是否有錯誤記錄解決 mail() 發送失敗的關鍵在於「系統元件完整」與「PHP 參數精準」。移除 sendmail_path 中的 -f 參數是最常被忽略卻最關鍵的一步。若仍無法解決,建議改用 PHPMailer 等成熟庫透過 SMTP 發信,穩定性更高。