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

Laravel中如何为多个Blade邮件模板配置Markdown格式

问题核心原因

PHP 中函数遇到第一个 return 就会终止执行,后续代码不会被触发,同时 Laravel 的单个 Mailable 实例仅对应单封邮件的配置,无法在同一个 build() 方法中返回多套模板配置。

实现方案

根据你的实际需求,可选择以下两种方案:

方案1:动态指定模板,批量发送多封不同模板的邮件

如果你的需求是给同一个/不同收件人发送多封对应不同模板的邮件,可以给 Mailable 类新增模板参数,调用时循环传入不同模板即可。

步骤1:改造 Mailable 类支持动态传模板

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class CustomMarkdownMail extends Mailable
{
    use Queueable, SerializesModels;

    protected $template;
    public $data;

    // 构造函数接收模板名和视图数据
    public function __construct(string $template, array $data)
    {
        $this->template = $template;
        $this->data = $data;
    }

    public function build()
    {
        // 注意 markdown 方法不需要写 .blade.php 后缀,直接传视图名即可
        return $this->markdown($this->template, [
            'messageBody' => $this->data['message']
        ]);
    }
}

步骤2:循环发送多模板邮件

// 定义需要发送的模板列表
$templateList = ['mail1', 'mail2', 'mail3'];
// 公共传递数据
$mailData = ['message' => '你的邮件正文内容'];
$toAddress = 'recipient@example.com';

foreach ($templateList as $tpl) {
    \Mail::to($toAddress)->send(new \App\Mail\CustomMarkdownMail($tpl, $mailData));
}

方案2:多个模板拼接为同一封邮件

如果你的需求是把三个模板的内容合并到同一封 Markdown 邮件里,不需要修改 Mailable 逻辑,直接用 Blade 的 @include 语法在主模板引入子模板即可:

  1. 新建主 Markdown 邮件模板 mail-combined.blade.php
@component('mail::message')
# 邮件总标题

{{-- 依次引入三个子模板,子模板的 Markdown 语法会自动渲染 --}}
@include('mail1')
@include('mail2')
@include('mail3')

此致,<br>
{{ config('app.name') }}
@endcomponent
  1. Mailable 的 build() 方法直接返回主模板即可
public function build()
{
    return $this->markdown('mail-combined', [
        'messageBody' => $this->data['message'],
    ]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:12:02