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

Laravel中Markdown邮件嵌套组件解析异常问题求助

嘿,我之前也踩过这个坑!你遇到的问题是Markdown邮件组件没有被正确解析,直接输出了原始代码,咱们一步步来解决:

1. 先确认你发布了Laravel的邮件组件资源

Laravel的mail::button这类组件默认存放在vendor包里,如果没有发布到本地视图目录,Laravel无法正确渲染它们。运行这个命令发布:

php artisan vendor:publish --tag=laravel-mail

执行后你会在resources/views/vendor/mail下看到所有默认的邮件组件模板,这是渲染按钮等元素的关键。

2. 检查邮件模板的扩展名

你的模板文件必须是.blade.php后缀,比如resources/views/emails/order-shipped.blade.php。如果扩展名不对(比如写成.php或者.md),Laravel不会解析里面的Blade组件,直接输出原始文本。

3. 确认发送邮件时用的是->markdown()方法

别不小心用错了发送方法!比如下面是正确的发送代码:

// 示例:在控制器或任务中发送邮件
$url = route('orders.show', $orderId);

Mail::to($recipientEmail)->markdown('emails.order-shipped', ['url' => $url]);

如果用了->html()或者->text(),就会直接把模板内容当作纯文本/HTML输出,不会解析Markdown组件。

4. 排查邮件客户端的显示设置

如果上面几步都做了还是有问题,可能是邮件客户端禁用了HTML渲染。试试用Gmail、Outlook这些主流客户端查看,或者在邮件设置里开启HTML显示。

给你一个完整的正确示例参考:

模板文件 resources/views/emails/order-shipped.blade.php

@component('mail::message')
# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

发送代码

public function sendShippedNotification(User $user, Order $order)
{
    $url = route('orders.details', $order->id);
    
    Mail::to($user->email)->markdown('emails.order-shipped', compact('url'));
}

按照这些步骤排查,应该就能正常显示按钮了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:30:04