Laravel 10邮件问候语HTML标签在Mailtrap中未渲染的问题
解决Laravel 10邮件Salutation换行兼容问题
问题根源
<br>标签显示为原始文本:Laravel默认会对邮件内容中的HTML标签做转义处理,所以salutation传入的HTML标签被当成纯文本输出。- PHP_EOL不生效:HTML邮件里,普通换行符(
\n/PHP_EOL)不会被解析为换行,只有HTML标签(如<br>)或块级元素才会触发换行;若邮件客户端显示纯文本版本,PHP_EOL才会生效,但多数主流客户端优先渲染HTML版本。 - Mailtrap并非问题所在:它只是原样展示邮件的HTML/纯文本内容,不会修改渲染逻辑。
可行解决方案
方法1:用HtmlString避免HTML转义
Laravel提供HtmlString类,标记内容为无需转义的HTML,让<br>标签正常渲染:
use Illuminate\Support\HtmlString; // 在通知类的build方法中 return $this->view('emails.notification') ->salutation(new HtmlString($supportSignature));
注意:确保
$supportSignature来自可信来源,避免XSS风险。
方法2:同时兼容HTML和纯文本邮件
如果需要兼顾两种邮件格式,可生成适配双格式的内容:
// 拆分出HTML和纯文本版本的签名 $htmlSignature = $supportSignature; $textSignature = str_replace(['<br>', '<br/>'], PHP_EOL, $supportSignature); // 在通知类中同时设置两种视图 return $this->view('emails.notification') ->text('emails.notification_plain') ->with(['signature' => $htmlSignature, 'textSignature' => $textSignature]);
然后在HTML视图中用{!! $signature !!}输出未转义的HTML,纯文本视图中直接输出{{ $textSignature }}。
方法3:使用Laravel Markdown邮件
若采用Markdown邮件,可将HTML换行转换为Markdown格式(两个空格加换行):
// 转换HTML换行为Markdown换行格式 $markdownSignature = str_replace(['<br>', '<br/>'], " \n", $supportSignature); ->salutation($markdownSignature);
Markdown邮件会自动将格式转换为对应HTML,同时生成正确的纯文本版本。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

