首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Linux 伺服器安裝 sendmail 並配置 PHP 寄信完整步驟

     編輯:PHP 綜合知識

安裝 sendmail

sudo apt-get update
sudo apt-get install sendmail

啟動服務

sudo /etc/init.d/sendmail start
# 或 systemd 系統
sudo systemctl start sendmail
sudo systemctl enable sendmail

修改 php.ini

[mail function]
SMTP = localhost
smtp_port = 25
sendmail_from = me@example.com
; Linux 通常使用 sendmail_path,建議明確指定
sendmail_path = /usr/sbin/sendmail -t -i

修改後需重啟 PHP-FPM / Apache 生效:sudo systemctl restart php7.4-fpm 或 sudo systemctl restart apache2。

PHP 寄信封裝函數 (使用 PHPMailer 推薦)

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

function sendMail($to, $subject, $body, $from = 'me@example.com', $fromName = '', $isHtml = true) {
    $mail = new PHPMailer(true);
    try {
        $mail->isSendmail(); // 使用本地 sendmail
        $mail->setFrom($from, $fromName ?: $from);
        $mail->addAddress($to);
        $mail->Subject = $subject;
        $mail->msgHTML($isHtml ? $body : nl2br($body));
        $mail->AltBody = $isHtml ? strip_tags($body) : $body;
        $mail->send();
        return true;
    } catch (Exception $e) {
        error_log("Mailer Error: {$mail->ErrorInfo}");
        return false;
    }
}

常見問題排查

現象可能原因解決
信件卡在隊列不發送sendmail 服務未啟動/配置錯誤檢查 mailq、/var/log/mail.log
進垃圾郵件/被退信缺少 SPF/DKIM/DMARC、IP 信譽差配置域名 DNS 記錄、考慮使用 SMTP 服務商 (SendGrid, Mailgun)
PHP mail() 返回 falsesendmail_path 錯誤、權限不足確認 which sendmail、php.ini 設定、禁用函數列表
中文亂碼編碼未宣告$mail->CharSet = 'UTF-8'

生產環境建議

  • 避免直接用本地 sendmail:交付率低、難以監控、易被封鎖。
  • 改用專業 SMTP 服務商 (SendGrid, Mailgun, Amazon SES, Postmark) + PHPMailer/SwiftMailer。
  • 非同步發送:將寄信任務推入隊列 (Redis/RabbitMQ),Worker 背景處理,提升回應速度。
  • 模板化:使用 Blade/Twig 等模板引擎分離內容與樣式。

結語

本文提供 sendmail 安裝、php.ini 配置、PHPMailer 封裝的最小可行方案,適合開發/測試環境。生產系統強烈建議接入專業郵件服務商,確保高送達率、可觀測性與合規性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved