我正在尝试使用 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 ) 我应该收到正确的电子邮件,包括附件。我收到了电子邮件,但没有收到附件。我该如何解决这个问题?
最佳答案
你能为你的 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
。
关于php - 附件不使用 Laravel 邮件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999286/