Linux VPS环境下PHP表单无法发送邮件的配置问题咨询
PHP表单无法发送邮件解决指南
PHP内置的mail()函数本身不具备直接发送邮件的能力,它仅会调用服务器系统层的邮件传输代理(MTA)完成发信操作,你遇到的问题本质是服务器未完成邮件发送相关配置,网上很多教程只放代码是默认演示环境已经提前配置好MTA,自建VPS默认没有对应配置自然无法发信。
1 检查配置服务器MTA服务
目前你的日志只有OpenDKIM启动记录,没有任何邮件投递相关日志,首先确认是否安装了Postfix、Sendmail这类MTA服务:
- 执行命令检查Postfix运行状态:
systemctl status postfix - 如果未安装,对应发行版直接安装即可,Debian/Ubuntu系列执行
apt install postfix,安装过程选择「Internet Site」,域名填写发信所用的vlfmedia.dk - 配置完成后可以先做命令行发信测试:
echo "测试邮件内容" | mail -s "测试标题" 你的测试邮箱地址,同时查看/var/log/mail.log获取投递详情
2 配置PHP发信参数
MTA配置正常后,检查对应PHP版本的php.ini文件配置:
- 找到
sendmail_path配置项,修改为sendmail_path = /usr/sbin/sendmail -t -i - 保存后重启Apache服务生效:
systemctl restart apache2
3 补充域名验证配置避免邮件被拒收
如果命令行发信正常,但邮箱没收到信,大概率是被服务商的反垃圾策略拦截,需要给发信域名vlfmedia.dk添加3条DNS解析记录:
- SPF记录:类型TXT,主机记录@,值为
v=spf1 a mx ip4:[你的VPS公网IP] ~all - DKIM记录:你已经安装OpenDKIM,生成DKIM密钥后把公钥内容作为TXT记录添加到解析
- DMARC记录:类型TXT,主机记录_dmarc,值为
v=DMARC1; p=none; sp=none; rua=mailto:dmarc@vlfmedia.dk
替代方案
如果不想自己维护MTA配置,可以直接使用PHPMailer类库,调用第三方SMTP服务发信,稳定性远高于调用系统mail()函数,也不需要在服务器上配置MTA相关服务。
内容的提问来源于stack exchange,提问作者Hermansen
相关产品推荐
相关产品推荐

