在 Linux 系统中配置 PHP 使用 sendmail 发送邮件,通常涉及以下几个步骤:
- 安装并配置 Sendmail(或替代服务如 Postfix)
- 配置 PHP 的
php.ini - 测试邮件发送功能
安装和配置邮件传输代理(MTA)
安装 Sendmail(可选)
sudo apt install sendmail # Debian/Ubuntu sudo yum install sendmail # CentOS/RHEL
⚠️ 注意:生产环境中更推荐使用 Postfix,因为它更轻量、易配置、安全性更好。
安装并配置 Postfix(推荐)
sudo apt install postfix # Debian/Ubuntu sudo yum install postfix # CentOS/RHEL
安装过程中会提示选择配置类型,一般选择 Internet Site,并设置你的域名(如 example.com)。
启动并启用服务:
sudo systemctl enable postfix sudo systemctl start postfix
配置 PHP 使用 sendmail
编辑 PHP 配置文件 php.ini:
sudo nano /etc/php/8.1/apache2/php.ini # 根据 PHP 版本和 Web 服务器调整路径
找到以下行并修改:
[mail function] ; For Win32 only. ; SMTP = localhost ; smtp_port = 25 ; For Win32 only. ; sendmail_from = me@example.com ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = /usr/sbin/sendmail -t -i
✅ 确保
sendmail_path指向正确的 sendmail 可执行文件路径。
对于 Postfix,/usr/sbin/sendmail已存在(Postfix 会提供兼容接口)。
重启 Web 服务器使配置生效:
sudo systemctl restart apache2 # Apache sudo systemctl restart nginx # Nginx + PHP-FPM
测试邮件发送
创建一个测试脚本 test_mail.php:
<?php $to = "your_email@example.com"; $subject = "Test Mail from PHP"; $message = "Hello! This is a test email sent from PHP using sendmail."; $headers = "From: webmaster@example.comrn"; if (mail($to, $subject, $message, $headers)) { echo "Email sent successfully."; } else { echo "Email sending failed."; } ?>
通过浏览器访问该脚本,检查是否收到邮件。
常见问题排查
邮件未发出?
- 检查
/var/log/mail.log或/var/log/maillog日志:sudo tail -f /var/log/mail.log
- 确保防火墙允许 25 端口(SMTP)出站。
邮件被标记为垃圾邮件?
- 配置 SPF、DKIM、DMARC 记录。
- 使用外部 SMTP 服务(如 Gmail、SendGrid、Amazon SES)替代本地 sendmail。
使用外部 SMTP 替代 sendmail?
如果不想依赖本地 MTA,可以使用 PHPMailer 或 SwiftMailer 库,通过 SMTP 直接发送邮件,
use PHPMailerPHPMailerPHPMailer; use PHPMailerPHPMailerSMTP; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = 'your_email@gmail.com'; $mail->Password = 'your_app_password'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; $mail->setFrom('your_email@gmail.com', 'Your Name'); $mail->addAddress('recipient@example.com'); $mail->Subject = 'Test Subject'; $mail->Body = 'Test body'; $mail->send();
| 方式 | 优点 | 缺点 |
|---|---|---|
| 本地 sendmail/Postfix | 无需外部服务,配置简单 | 易被标记为垃圾邮件,需维护 SPF/DKIM |
| 外部 SMTP(如 Gmail/SendGrid) | 可靠、易追踪、不易进垃圾箱 | 需要 API 密钥或应用密码,可能有费用 |
根据你的需求选择合适的方案,如果是开发测试,本地 sendmail 足够;如果是生产环境,建议使用外部 SMTP 服务。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/476816.html



