附件未与Laravel邮件一起发送

时间:2018-08-24 07:16:03

标签: php laravel

我正在尝试通过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),我应该收到正确的电子邮件,包括附件。我收到电子邮件,但没有附件。我该怎么解决?

1 个答案:

答案 0 :(得分:0)

您可以为您的pdf尝试output方法而不是对其进行流式处理吗,因为流首先调用输出,然后建立新的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附加到电子邮件之前,请执行此操作。