Laravel 5.5邮件模板显示HTML标签问题求助
问题分析与解决方案
嘿,我来帮你搞定这个问题!你遇到的核心问题是CKEditor生成的HTML内容没被邮件客户端渲染,反而显示了原始标签,主要是两个地方出了问题:
1. Blade模板自动转义了HTML
你当前的mail.blade.php里用了{{$content}},Blade的双大括号语法会自动把HTML标签转义成实体字符(比如把<p>变成<p>),所以邮件里就直接显示标签代码,而不是渲染成段落了。
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
相关产品推荐
相关产品推荐

