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

PHP邮件发送正常但提示$body未定义问题求助

解决PHP中$body未定义的错误

嘿,这个问题其实挺常见的!你碰到的Notice: Undefined variable: body错误,核心原因很简单——你在使用.=拼接字符串之前,没先初始化$body变量。PHP里如果直接对一个没声明过的变量用.=,就会抛出这个提示。

快速修复方案

只需要在使用.=追加内容前,把$body初始化为空字符串就行,修改后的代码如下:

//check member Email matches 
$addmember = $link->query("SELECT Email FROM logins WHERE Email ='$memberemail'")->fetch_assoc()['Email']; 
$to = $addmember; 
$subject = "Becoming part of $leaguename"; 
// 先初始化$body为空字符串
$body = "";
$body.="So you want to become part of $leaguename?".PHP_EOL; 
$body.="Please click the link below to join!".PHP_EOL; 
$body.="http://www.wesbitelink.dev/verify.php?memberemail=$memberemail;".PHP_EOL; 
$headers = "From: localhost"; 
mail($to, $subject, $body, $headers); 
header("location: addanothermember.php"); 

为什么会出现这个错误?

PHP里的.=是字符串追加操作符,它需要左边的变量已经有一个初始值(哪怕是空字符串),才能把右边的内容追加上去。如果$body从来没被定义过,PHP就不知道它的初始状态是什么,自然会抛出“未定义变量”的提示。初始化$body = ""之后,它就有了一个合法的初始值,后续的追加操作就能正常执行了。

额外的优化建议

  • 修复SQL注入风险:你的代码直接把$memberemail拼进SQL查询里,这存在严重的SQL注入漏洞!建议改用预处理语句,比如:
    $stmt = $link->prepare("SELECT Email FROM logins WHERE Email = ?");
    $stmt->bind_param("s", $memberemail);
    $stmt->execute();
    $result = $stmt->get_result();
    $addmember = $result->fetch_assoc()['Email'];
    
  • 处理查询为空的情况:如果查询不到匹配的邮箱,fetch_assoc()会返回null,直接取['Email']会触发新的错误。最好先判断结果是否存在:
    $result = $link->query("SELECT Email FROM logins WHERE Email ='$memberemail'");
    if ($result && $row = $result->fetch_assoc()) {
        $addmember = $row['Email'];
        // 邮件发送逻辑放在这里
    } else {
        // 提示用户邮箱不存在,避免后续报错
        echo "该邮箱未在系统中注册";
        exit;
    }
    
  • 优化邮件头:From字段最好使用符合规范的邮箱地址(比如no-reply@wesbitelink.dev),用localhost可能会导致邮件被当成垃圾邮件拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:02:54