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

Laravel 5.5邮件模板显示HTML标签问题求助

问题分析与解决方案

嘿,我来帮你搞定这个问题!你遇到的核心问题是CKEditor生成的HTML内容没被邮件客户端渲染,反而显示了原始标签,主要是两个地方出了问题:

1. Blade模板自动转义了HTML

你当前的mail.blade.php里用了{{$content}},Blade的双大括号语法会自动把HTML标签转义成实体字符(比如把<p>变成&lt;p&gt;),所以邮件里就直接显示标签代码,而不是渲染成段落了。

2. 多余的addslashes破坏了HTML结构

你在替换变量时加了addslashes,这个函数会给HTML里的特殊字符(比如引号)加反斜杠,导致HTML结构被破坏,邮件客户端没法正确解析标签。


具体修复步骤

第一步:修改Blade模板,允许原始HTML输出

把mail.blade.php里的{{$content}}改成{!! $content !!},双感叹号的语法会告诉Blade不要转义内容,直接输出原始HTML:

<table>
 <tr><td>SiteName</td>
 </tr>
 <tr><td>{!! $content !!}</td></tr>
</table>

第二步:移除addslashes并修正变量替换逻辑

你之前的str_replace只替换了变量名(比如username),但模板里的占位符是{{$username}},这样容易出现意外替换的问题。同时删掉addslashes——Laravel的Eloquent在存储数据时已经处理了转义,手动加反斜杠只会添乱:

// 替换完整的占位符字符串,确保精准匹配
$content = str_replace(
    ['{{$username}}', '{{$newPassword}}'],
    [$userName, $request->confirm_password],
    $emailTemplate->templateBody // 去掉addslashes
);

Mail::send(['html' => 'mail'], ['content' => $content], function ($message) use($emailTemplate, $user){
    $message->from($emailTemplate->fromEmail, $emailTemplate->fromName);
    $message->to($user->email);
});

这样修改后,邮件客户端就能正确渲染CKEditor生成的HTML内容了,<p>标签会变成正常的段落,而不是显示原始代码。

内容的提问来源于stack exchange,提问作者Niladri Banerjee - Uttarpara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:55