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
相关产品推荐
相关产品推荐

