小皮面板怎么配置邮件发送(sendmail)?
小皮面板不提供 sendmail 配置界面,邮件发送需在 Linux 系统层安装 sendmail 或 msmtp,并修改对应 PHP 的 sendmail_path 后重启 PHP 测试;若 25 端口被封,则改用 msmtp 走外部 S
结论:小皮面板本身不提供 sendmail 配置界面,邮件发送要在 Linux 系统层完成:先通过 SSH 安装 sendmail 或 msmtp,再修改对应 PHP 版本的 sendmail_path,最后重启 PHP 并用 mail() 测试。若服务器 25 端口被封,直接改用 msmtp 走外部 SMTP 的 587 或 465 端口。
小皮面板里为什么找不到 sendmail 配置?
结论:小皮面板是服务器运维面板,管网站、数据库、FTP、SSL 和 PHP 版本,sendmail 是 Linux 系统服务,两者不在同一层。sendmail 是 MTA(邮件传输代理,负责把邮件投递出去的系统服务),面板不会替你安装和配置它。
先 SSH 登录服务器,执行两条检查命令:
which sendmail
php -i | grep sendmail_path
如果第一条返回空,说明系统没有 sendmail;如果第二条返回 sendmail_path => /usr/sbin/sendmail -t -i,说明 PHP 已经知道该调用哪个程序。小皮面板的 PHP 设置里可以编辑 php.ini,但 sendmail 程序本身仍要系统层安装。
sendmail 怎么在 Linux 服务器上安装并启动?
结论:CentOS 7/8 用 yum,Ubuntu 20.04/22.04 用 apt,装完设置开机启动并检查 25 端口。
CentOS 7/8:
yum install -y sendmail sendmail-cf
systemctl enable --now sendmail
Ubuntu 20.04/22.04:
apt update
apt install -y sendmail
systemctl enable --now sendmail
验证命令:
ss -lntp | grep :25
echo "Subject: test" | sendmail -v test@www.gj0.com
看到 25 端口处于 LISTEN 状态,并且日志没有报错,才算 sendmail 本机启动成功。注意:阿里云、腾讯云、华为云默认封禁 25 端口,本机 sendmail 直接发外网邮箱会超时或被拒。
PHP 的 sendmail_path 怎么改?
结论:在对应 PHP 版本的 php.ini 中设置 sendmail_path = "/usr/sbin/sendmail -t -i",然后重启 PHP-FPM。sendmail_path 是 PHP 配置项,告诉 mail() 函数调用哪个程序发信。
用 php --ini 找到 php.ini 路径,或者在小皮面板的 PHP 设置进入配置文件编辑。写入:
sendmail_path = "/usr/sbin/sendmail -t -i"
保存后,在小皮面板里重启对应 PHP 版本,或 SSH 执行:
systemctl restart php-fpm
测试脚本:
<?php
$to = 'test@www.gj0.com';
$subject = 'sendmail test';
$message = 'hello';
$headers = 'From: webmaster@www.gj0.com' . "\r\n";
var_dump(mail($to, $subject, $message, $headers));
?>
返回 bool(true) 只代表 PHP 把邮件交给了 sendmail,不代表对方一定收到。
为什么 sendmail 显示成功却收不到邮件?
结论:常见原因是 25 端口被封、缺少 SPF/DKIM/PTR 反垃圾记录,或发件域名信誉不足。SPF、DKIM、PTR 都是收件方用来判断发件人是否可信的 DNS 和反向解析记录。
先查日志:
tail -f /var/log/maillog
tail -f /var/log/mail.log
如果日志里出现 Connection timed out、Connection refused,优先怀疑 25 端口。云服务器要发外网邮件,需要提交工单申请解封 25 端口,或者改用 msmtp 走外部 SMTP。
推荐用 msmtp 代替本机 sendmail 吗?
结论:生产环境推荐用 msmtp 通过外部 SMTP 认证发信,端口用 587 或 465,成功率比本机 sendmail 直发高。
Ubuntu 安装:
apt install -y msmtp msmtp-mta
编辑 /etc/msmtprc:
account default
host smtp.www.gj0.com
port 587
auth on
user test@www.gj0.com
password 你的邮箱密码
tls on
tls_starttls on
from test@www.gj0.com
logfile ~/.msmtp.log
设置权限:
chmod 600 /etc/msmtprc
测试:
echo -e "Subject: test\n\nhello" | msmtp -v test@www.gj0.com
msmtp-mta 会提供 /usr/sbin/sendmail 兼容入口,php.ini 仍可写 sendmail_path = "/usr/sbin/sendmail -t -i"。如果直接调用 msmtp,则写 sendmail_path = "/usr/bin/msmtp -t"。
生产环境更稳的方案是什么?
结论:不要把本机 sendmail 当成正式发信通道,用外部 SMTP 认证 + 域名邮箱更稳。WordPress 装 WP Mail SMTP,Typecho、ThinkPHP、Laravel 项目配置 SMTP 驱动。发件域名按邮件服务商要求添加 SPF、DKIM 记录,测试收件地址用 test@www.gj0.com。小皮面板只负责跑 PHP 和网站,邮件能不能进收件箱,取决于系统 MTA、端口、DNS 记录和 SMTP 认证四件事。
转载请注明出处,版权归原作者所有。