使用SwiftMailer Laravel 5.2时遇到问题。我有一个用于发送电子邮件的控制器,并将其设置为每分钟运行一次。当我使用php artisan schedule:run在下面执行脚本时,它会不断返回错误消息“分段错误(内核已转储)”。
我的脚本:
public static function sendMailCoc()
{
$mail_log = MailLog::where('status', '!=', 'SENT')->where('type', '3')->orderBy('id', 'asc')->get();
foreach($mail_log as $mail){
if($mail->to!='') {
$coc = json_decode($mail->parameter, true);
try {
Mail::queue($mail->file_view,
['to' => $mail->to_name,
'coc' => $coc,
'notif_id' => $mail->notification_id
],
function ($message) use ($mail) {
$message->to($mail->to)
->subject($mail->subject);
});
$mail->status = 'SENT';
$mail->error_message = '';
$mail->save();
}
catch(Swift_TransportException $e){
$mail->status = 'ERROR';
$mail->error_message = $e->getMessage();
$mail->save();
continue;
}catch (Exception $e) {
$mail->status = 'ERROR';
$mail->error_message = $e->getMessage();
$mail->save();
continue;
}
}
}
}
有时候,如果我测试只发送一封电子邮件,它会起作用,并且不会返回错误消息。但是,当我尝试通过循环发送大量电子邮件时,总是会收到错误消息“分段错误(核心已转储)”。我正在使用Ubuntu Server 14.04。
我不知道是什么导致此错误。是我的脚本导致了此问题,是Laravel还是Ubuntu Linux?
有什么办法解决这个问题?我应该先检查什么?
感谢您的帮助和答复。
答案 0 :(得分:0)
野外射击,但最近我一直在调试与排队作业有关的相同错误消息:
根据Laravel 5.6文档(https://laravel.com/docs/5.6/queues#creating-jobs):
“二进制数据(例如原始图像内容)应通过 base64_encode函数,然后传递给已排队的作业。除此以外, 作业放置在上时,可能无法正确序列化为JSON 队列。”
在构造函数中添加base64_encode($input)
并在handle()函数中添加base64_decode($this->input)
时,我的问题就解决了(几乎!)。
PS:由于我使用两个分布式应用程序进行输入并在队列上工作,因此我还必须在两个应用程序上分别运行composer dump-autoload
和php artisan cache:clear
,同时还要重新启动supervisor
worker ,在更改代码后。