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

Laravel 10邮件问候语HTML标签在Mailtrap中未渲染的问题

解决Laravel 10邮件Salutation换行兼容问题

问题根源

  1. <br>标签显示为原始文本:Laravel默认会对邮件内容中的HTML标签做转义处理,所以salutation传入的HTML标签被当成纯文本输出。
  2. PHP_EOL不生效:HTML邮件里,普通换行符(\n/PHP_EOL)不会被解析为换行,只有HTML标签(如<br>)或块级元素才会触发换行;若邮件客户端显示纯文本版本,PHP_EOL才会生效,但多数主流客户端优先渲染HTML版本。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:16:01