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

PHP实现邮件发送功能报unexpected variable "$body"语法解析错误

错误原因

syntax error, unexpected variable "$body" 这个解析错误的本质是:PHP解析器扫描到$body变量时,判定前一段代码语句尚未正常终止。结合你给出的代码,问题基本出在两个地方:

  • $body的上一行($email_to = "lunivii@outlook.com")存在语法问题:要么漏了行尾的半角分号;,要么分号是全角中文符号,或者该行的字符串双引号没有成对闭合
  • 这段代码是从其他页面/文档复制而来,夹带了零宽空格、不可见控制字符,导致解析器无法正常识别语句边界

此外代码里还有两个会影响功能的逻辑问题,即使修好语法错也无法正常实现邮件发送:

  • 第二次输出的<pre>是开标签,应该为闭合标签</pre>,会造成页面HTML结构错乱
  • mail()函数传参顺序错误,没有使用你提前拼接的$body作为正文,也缺少必要的邮件头配置,即使调用成功也大概率被判定为垃圾邮件拦截。
修复方法
  • 解决语法报错:手动逐字符重写$email_to赋值到$body赋值的两行代码,不要直接复制粘贴,确保所有引号、分号都是半角英文符号,行尾必须加半角分号结束语句。
  • 修正pre标签闭合错误。
  • 调整mail()函数的传参顺序,补充必填的邮件头配置,传入正确的邮件主题、正文内容。
修复后可运行代码
<?php
  $message_sent = false;
  if(isset($_POST['lname']) && $_POST['lname'] != ''){

    if(filter_var($_POST['lname'], FILTER_VALIDATE_EMAIL)){
        echo "<pre>";
        print_r($_POST);
        echo "</pre>";
        $name = $_POST['fname'];
        $email = $_POST['lname'];
        $story = $_POST['story'];

        $email_to = "lunivii@outlook.com";
        $email_subject = "网站表单新留言";
        $body = "";
        
        $body .= "From: ". $name. "\r\n";
        $body .= "Email: ". $email. "\r\n";
        $body .= "Message: ". $story. "\r\n";

        // 配置基础邮件头
        $headers = "From: 网站表单 <no-reply@your-site.com>\r\n";
        $headers .= "Reply-To: ". $email. "\r\n";
        $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";

        // 按正确顺序传参:收件人、邮件主题、正文、邮件头
        mail($email_to, $email_subject, $body, $headers);

        $message_sent = true;
    }
}
?>

补充说明:PHP原生mail()函数依赖服务器端正确配置Sendmail/Postfix等邮件服务,本地开发环境下大概率无法直接使用。如果需要稳定发信,建议改用PHPMailer类库通过SMTP服务发送。

内容的提问来源于stack exchange,提问作者2k adc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:03:20