在 Laravel 5.1/OctoberCMS 中使用 attachData 排队邮件
Queuing mail with attachData in Laravel 5.1 / OctoberCMS
以下是在我使用Mail::send
时有效
$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
一起使用,所以看起来来自附件的原始数据导致队列出现问题,但相关的 October or Laravel 关于如何处理这个问题的文档。
可能是因为 $invoicePdf
数据是 PDF file
的原始数据,并且 php 在保存到数据库时无法处理该数据 (attachData
)。
hmm, alternative you can generate file and then just attach file path
to mail and then add to queue.
// 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
以下是在我使用Mail::send
$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
一起使用,所以看起来来自附件的原始数据导致队列出现问题,但相关的 October or Laravel 关于如何处理这个问题的文档。
可能是因为 $invoicePdf
数据是 PDF file
的原始数据,并且 php 在保存到数据库时无法处理该数据 (attachData
)。
hmm, alternative you can generate file and then just attach
file path
to mail and then add to queue.
// 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