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
相关产品推荐
相关产品推荐

