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

如何在Laravel 9或10中使用Laravel Mail服务实现邮件发送?

解决Laravel Mail类中附加dompdf生成PDF的问题

1. 确认dompdf环境配置

若尚未安装dompdf,先执行安装命令:

composer require barryvdh/laravel-dompdf

如需自定义配置,可发布扩展配置文件:

php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

2. 编写Mail类逻辑

假设你的业务邮件类为InvoiceNotification,修改其build方法,嵌入PDF生成与附件逻辑:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Barryvdh\DomPDF\Facade\Pdf;

class InvoiceNotification extends Mailable
{
    use Queueable, SerializesModels;

    public $invoiceData;

    // 构造方法接收业务数据
    public function __construct($invoiceData)
    {
        $this->invoiceData = $invoiceData;
    }

    public function build()
    {
        // 加载PDF模板并生成PDF实例
        $pdf = Pdf::loadView('pdf.invoice_template', $this->invoiceData);

        return $this->subject('您的订单发票已生成')
                    // 设置邮件正文视图
                    ->view('emails.invoice_notify')
                    // 附加PDF二进制内容,无需先存磁盘
                    ->attachData(
                        $pdf->output(),
                        "invoice_{$this->invoiceData['order_no']}.pdf",
                        ['mime' => 'application/pdf']
                    );
    }
}

关键细节说明

  • Pdf::loadView():传入PDF对应的Blade视图(如resources/views/pdf/invoice_template.blade.php)和业务数据
  • attachData():直接使用PDF的二进制输出作为附件,避免磁盘IO开销,同时指定文件名与MIME类型
  • 确保$invoiceData包含生成PDF和邮件正文所需的所有变量(如订单号、用户信息、金额等)

3. 控制器中调用Mail类

<?php

namespace App\Http\Controllers;

use App\Mail\InvoiceNotification;
use Illuminate\Support\Facades\Mail;

class OrderController extends Controller
{
    public function sendInvoice()
    {
        $invoiceData = [
            'order_no' => 'ORD-20240501-001',
            'user_name' => '李四',
            'total_amount' => 199.00,
            // 其他业务字段
        ];

        // 发送邮件到目标邮箱
        Mail::to('user@example.com')->send(new InvoiceNotification($invoiceData));

        return redirect()->back()->with('success', '发票邮件已发送');
    }
}

常见问题排查

  • PDF生成空白:检查PDF视图路径是否正确、数据是否正常传递、视图内有无语法错误
  • 附件无法打开:确认mime类型为application/pdf,$pdf->output()返回有效二进制内容
  • 邮件发送失败:核对.env文件中MAIL_HOST、MAIL_PORT、MAIL_USERNAME等配置项是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:26:07