我正在尝试通过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),我应该收到正确的电子邮件,包括附件。我收到电子邮件,但没有附件。我该怎么解决?
答案 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
附加到电子邮件之前,请执行此操作。