使用Mail::send
时,以下 IS 正常工作
$email = 'my@email.com';
$name = 'My Name';
$invoice = InvoicePdf::generate($invoice_id); // generates PDF as raw data
Mail::send('mail.template', null, function($message) use ($name, $email, $invoice) {
$message->to($email, $name);
$message->subject('Thank you for your order!');
$message->attachData($invoicePdf, 'invoice.pdf', ['mime' => 'application/pdf']);
});
它工作正常,并使用正确的PDF附件生成电子邮件。
但是,如果我将Mail::send
更改为Mail::queue
,则会收到以下错误:
Unable to JSON encode payload. Error code: 5
/var/www/html/october/vendor/laravel/framework/src/Illuminate/Queue/Queue.php line 90
如果我将$message->attachData();
行删除,那么它甚至可以与Mail::queue
一起使用,因此来自附件的原始数据似乎会导致队列出现问题,但相关内容中没有任何内容{{3} }或October有关如何处理此问题的文档。
答案 0 :(得分:0)
可能是因为$invoicePdf
数据是PDF file
的原始数据,而且在保存到数据库时php无法处理该数据(attachData
)。
嗯,替代你可以生成文件,然后只需将file path
附加到邮件,然后添加到队列。
// generate tempfile name
$temp_file = tempnam(sys_get_temp_dir(), 'inv');
// this pdf is generated by renatio plugin but you can
// use your data and save it to disk
PDF::loadTemplate('renatio::invoice')
->save($temp_file);
Mail::queue('mail.template', null, function($message) use ($name, $email, $temp_file) {
$message->to($email, $name);
$message->subject('Thank you for your order!');
$message->attach($temp_file, ['as' => 'Your_Invoice.pdf', 'mime' => 'application/pdf']);
});
它应该有用。
@Joseph
指出,在Laravel 5.5中可以使用mailable
。 @Joseph
指出了这个解决方案,看起来很有效,所以如果laravel
版本为>= 5.5
,您也可以使用此解决方案
https://laracasts.com/discuss/channels/laravel/sending-email-with-a-pdf-attachment
谢谢@Joseph