Laravel邮件无法发送附件

3

我正在尝试使用Laravel发送电子邮件并将生成的PDF附加到电子邮件中。电子邮件已发送,但PDF未被发送。

注意事项: 使用Larvel版本5.5 PHP版本>=7.0.0 我正在使用的生成pdf库:https://github.com/niklasravnsborg/laravel-pdf

以下是代码:

<?php

namespace Portal\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use niklasravnsborg\LaravelPdf\Facades\Pdf as PDF;

class PreApprovalEmail extends Mailable
{
    use Queueable, SerializesModels;
    public $name;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($name)
    {
        $this->name = $name;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $this->subject('Pre approval letter');

        return $this->view('emails.emailTemplate')->attachData($this->createPDF(), 'generated.pdf', [
            'mime' => 'application/pdf',
        ]);
    }

    public function createPDF()
    {
        $data = array(
            // data
        );

        $pdf = PDF::loadView('emails.generatablePDF', $data);
        return $pdf->stream('document.pdf');         
    }
}

这是我在routes/web.php文件中的路由:

Route::get('/samplemail', function () { 
    Mail::to("<my_email>@protonmail.com")->send(new PreApprovalEmail("test"));
    return view('emails.generatablePDF')
});

根据文档(https://laravel.com/docs/5.5/mail),我应该收到包括附件在内的正确电子邮件。我收到了电子邮件,但没有附件。我该如何解决这个问题?

从loadView方法中移除$data并尝试。 - Jinal Somaiya
我尝试移除 $data 但仍无法获取附件 - 无论如何,视图都需要 $data。 - moe
好的,那么尝试使用compact('data')。 - Jinal Somaiya
1个回答

2

您可以尝试使用output方法来输出您的PDF文件,而不是流式传输它。因为流式传输会先调用输出方法,然后构建一个新的HTTP响应:

    /**
     * @return mixed
     */
    public function build()
    {
        $this->subject('Pre approval letter');

        return $this->view('emails.emailTemplate')
            ->attachData($this->createPDF(), 'generated.pdf');
    }

    /**
     * @return mixed
     */
    public function createPDF()
    {
        $data = [
            // data
        ];

        $pdf = PDF::loadView('emails.generatablePDF', $data);
        return $pdf->output();
    }

同时确保你的 PDF 输出是正确的,所以在将其附加到电子邮件之前,请执行 dd


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接