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

Laravel使用默认模板发邮件:如何传入$data参数且不修改模板

解决Laravel不修改默认邮件模板传入$data的问题

嘿,我来帮你搞定这个问题!你完全不需要修改默认的vendor.mail.html.message模板,因为Laravel的邮件组件早就为你预留了扩展空间——默认模板里的{{ $slot }}就是专门用来放置自定义邮件内容的区域。下面是两种简单可行的实现方法:

方法一:使用Laravel内置的mail::message组件(推荐)

这个组件已经封装了你贴的默认邮件布局,你只需要创建一个自己的子视图来填充动态内容,全程不用碰默认模板。

  1. 创建自定义邮件视图
    在resources/views/emails目录下新建一个视图文件,比如notification.blade.php,内容如下:
@component('mail::message')
# 新通知

{{-- 直接使用传入的$data参数渲染内容 --}}
您好,{{ $data['name'] }}!

您收到一条新通知:{{ $data['content'] }}

{{-- 可选:添加官方邮件组件,比如按钮 --}}
@component('mail::button', ['url' => $data['action_url']])
查看详情
@endcomponent

感谢您的使用,
{{ config('app.name') }}
@endcomponent
  1. 修改邮件发送代码
    把Mail::send的第一个参数改成你刚创建的视图,确保$data被正确传递:
Mail::send('emails.notification', ['data' => $data], function($message) use($data) {
    $message->to($data['email']);
    $message->subject('New notification');
});

mail::message组件会自动把你写的内容填充到默认模板的$slot位置,header、footer都会保留默认样式,完美适配你的需求。

方法二:直接继承默认布局模板

如果你不想用组件语法,也可以直接继承默认布局,替换slot区域的内容:

  1. 创建自定义视图
    同样在resources/views/emails下新建notification.blade.php:
@extends('vendor.mail.html.message')

@section('slot')
    <h1>New notification</h1>
    <p>Hello {{ $data['name'] }},</p>
    <p>You have a new message: {{ $data['content'] }}</p>
@endsection
  1. 发送邮件代码和方法一一致
    调用这个自定义视图并传递$data即可,默认模板的header、footer会完整保留。

本质上,这两种方法都是利用了默认模板的$slot插槽特性——你只需要通过子视图把$data的内容注入到这个插槽里,就能在不改动默认模板的前提下展示动态内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:26