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

PHPMailer将require引入的模板赋值给Body时仅显示'1'问题求解

问题原因

PHP 中 require 语句的默认返回值为布尔值 true,打印输出时会被自动转换为字符串 1;仅当被引入的文件中主动使用 return 语句返回指定内容时,才会将 return 的值作为 require 的执行结果返回。
你观察到的 echo $template 可以输出完整模板内容属于错觉:你的模板文件中直接编写了裸HTML代码/内置了输出逻辑,在执行 $template = require(xxx) 这一步时,模板内容就已经被直接输出到了响应流中,并非 $template 变量存储了模板内容,此时 $template 变量本身的值始终是 1,因此赋值给 $mail->Body 时最终只会显示字符1。

解决方案

你可以选择两种方案修复该问题:

  • 方案1:使用输出缓冲区捕获模板内容(无需修改原有模板)
    通过PHP输出控制函数直接捕获require过程中输出的模板内容,赋值给变量即可:
// 开启输出缓冲区
ob_start();
require '../../template/newsletter/template_1.php';
// 获取缓冲区内容并清空缓冲区
$template = ob_get_clean();

// 正常赋值给邮件Body即可
$mail->Body = $template;
  • 方案2:修改模板文件主动返回内容
    在模板文件中将所有模板内容拼接为字符串后,通过return语句返回,即可让require语句直接返回模板内容:
// template_1.php 文件内部示例代码
$html = <<<HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <h2>您好</h2>
    <p>这是邮件正文内容</p>
</body>
</html>
HTML;
return $html;

额外提示:如果你的模板是HTML格式,需要给PHPMailer开启HTML解析配置,避免标签被直接当成纯文本展示:

$mail->isHTML(true);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:54:05