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

PHP mail()函数无报错却无法发送邮件的问题排查求助

故障排查点及修复方案
  • 变量名不匹配,核心逻辑未执行/邮件内容无效

    1. HTML表单中尺寸单选框的name属性为tsize,但PHP代码中获取该字段的写法为$tsize = $_POST['size'];,无法正确拿到表单提交的尺寸值
    2. 邮件HTML模板中输出尺寸的变量写为$tutasize,该变量不存在,会导致邮件内容出现未定义变量警告,部分服务商可能拦截内容异常的邮件
      修复:将PHP中对应代码改为$tsize = $_POST['tsize'];,同时把邮件模板里的$tutasize替换为$tsize
  • 验证码校验逻辑大概率未通过,发信代码根本没执行

    1. 首先检查你的服务器是否能正常访问谷歌服务:验证码校验需要请求谷歌的recaptcha接口,如果是中国大陆地区的服务器,该请求会直接失败,$responseData->success永远为false,不会走到发信分支
    2. 你当前没有加任何分支的错误提示,建议在验证码校验失败的else分支、验证码参数为空的else分支都加上错误打印,快速定位是不是卡在了验证码校验环节
    3. 确认谷歌验证码的站点密钥、服务端密钥是匹配的,你代码里贴的密钥不完整,确认实际运行时填的是完整正确的密钥
  • 邮件头不符合规范导致被服务商拦截

    1. $headers变量未初始化就使用.=拼接,会导致头部开头出现未定义警告的内容,破坏邮件头格式
    2. From字段值仅写了Moving,不符合邮件规范,必须为合法邮箱格式,示例:From: 搬家表单 <noreply@你的站点域名.com>,发件域名需要和你实际发信的服务器域名匹配,否则极大概率被反垃圾规则拦截
      修复:在拼接headers前添加$headers = '';初始化,修改From字段为带合法邮箱的格式
  • mail()函数本身配置/执行失败

    1. 你当前没有判断mail()函数的执行结果,函数执行失败返回false的话你也感知不到,建议修改发信代码为:
    $sendResult = mail($to, $subject, $main, $headers);
    if (!$sendResult) {
        // 可打印错误信息或者记录日志,也可以用error_get_last()查看具体报错
        print_r(error_get_last());
    }
    
    1. 大部分服务器默认没有配置SMTP发信服务,PHP原生的mail()函数需要依赖系统的sendmail组件或者配置好的SMTP服务,如果服务器没有做对应配置,mail()会直接执行失败。如果不想折腾服务器配置,建议改用PHPMailer等第三方发信库,直接对接第三方SMTP发信服务,发信成功率更高
  • 其他排查点

    1. 即使mail()返回成功,邮件也可能被收信方的反垃圾规则拦截,优先去收信邮箱的垃圾邮件、广告邮件文件夹查找
    2. 确认你代码里填写的收信邮箱是你实际在用的正确邮箱

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:03