Laravel发送邮件时Markdown视图未解析为HTML输出源码如何解决
Laravel Markdown邮件输出原始Blade源码修复方案
核心触发原因是调用->markdown()加载邮件视图时,Laravel未按预期走「Blade语法解析→Markdown转HTML」的渲染流程,按以下步骤逐一排查修复即可:
- 修正视图文件后缀
这是最高发的错误:将resources/views/emails/路径下的视图文件从companyactivation.blade.php重命名为companyactivation.blade.md。只有后缀为.blade.md的文件,Laravel才会识别为Markdown邮件模板,正常解析@component组件指令、{{ }}变量插值语法,不会直接输出原始文本。 - 校验视图传参逻辑
检查CompanyActivation邮件类,确保模板用到的所有变量都能被视图读取:
如果变量定义为邮件类的public属性,可不用手动传参,Blade会自动读取;protected、private属性必须显式绑定到视图参数。public function build() { return $this->subject('Account activatie') ->markdown('emails.companyactivation', [ // 模板用到的$company、$user变量,若为类的protected/private属性需在此手动传递 'company' => $this->company, 'user' => $this->user, ]); } - 清除缓存排除旧编译文件干扰
在项目根目录执行以下Artisan命令,清除已编译的视图缓存和应用缓存:php artisan view:clear php artisan cache:clear - 修复邮件组件配置缺失问题
如果上述操作完成后@component指令仍无法解析,执行命令重新发布Laravel官方邮件组件资源:
发布完成后检查php artisan vendor:publish --tag=laravel-mailconfig/mail.php中的markdown配置项,确认组件路径未被错误修改,指向正确的resources/views/vendor/mail目录即可。
注意:不要直接将Markdown模板内容以字符串形式传入邮件构建方法,必须放在独立的
.blade.md视图文件中,否则渲染流程不会触发。
内容的提问来源于stack exchange,提问作者Martijn Hiemstra
相关产品推荐
相关产品推荐

