You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web服务器中PHP mail函数无法正常工作,请求技术协助

排查并修复PHP mail()函数无法工作的问题

嘿,我来帮你搞定这个mail()函数的问题!先看你的代码,有几个明显的小问题,再加上服务器配置的常见坑,咱们一步步解决:

1. 核心问题:HTML邮件缺少必要的头信息

你要发送HTML格式的邮件,但没告诉邮件客户端这是HTML内容——这会导致邮件显示成一堆原始标签,甚至直接被拒收。另外,你的邮件头格式也不规范,字段之间需要用\r\n分隔。

2. 修正后的完整代码

直接用下面的代码替换你的原有代码,我已经修复了头信息的问题:

<?php
$to = "ganesh.sunraise@gmail.com";
$subject = "This is subject";
$message = "<b>This is HTML message.</b>";
$message .= "<h1>This is headline.</h1>";

// 构建符合规范的邮件头
$headers = "From: lokesh.sunraise111@gmail.com\r\n";
$headers .= "Reply-To: lokesh.sunraise111@gmail.com\r\n";
// 关键:声明这是HTML格式的邮件,指定编码
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

$retval = mail($to, $subject, $message, $headers);

if($retval) {
    echo "Message sent successfully...";
} else {
    echo "Message could not be sent...";
}
?>

3. 还要排查服务器的邮件配置(最容易忽略的点)

如果改了代码还是不行,大概率是服务器没配置邮件服务:

  • Linux服务器:需要安装并运行邮件传输代理(MTA),比如Postfix或Sendmail。运行systemctl status postfix检查状态,没装的话用apt install postfix(Debian/Ubuntu)或者yum install postfix(CentOS)安装,安装时选"Internet Site"模式即可。
  • Windows本地环境:打开php.ini,找到[mail function]区块,配置SMTP参数(比如用第三方邮箱的SMTP,比如QQ邮箱:SMTP=smtp.qq.com,smtp_port=587),还要设置sendmail_from为你的发件邮箱地址。
  • 查看PHP错误日志:日志里会明确告诉你mail()失败的原因——比如服务器拒绝连接、认证错误、发件人被标记为垃圾邮件等。日志路径通常在/var/log/php/error.log(Linux)或者php.ini里配置的error_log路径。

额外小贴士

  • 先测试纯文本邮件:把$message改成普通文本(比如"This is a test message."),简化头信息,确认能发送成功后再加HTML格式,排除格式干扰。
  • 避免被当成垃圾邮件:尽量用和服务器域名匹配的发件邮箱,或者给域名配置SPF、DKIM记录,不然很容易被邮箱服务商拒收。

内容的提问来源于stack exchange,提问作者L. Ganesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:19