为什么Laravel Mail队列中的收件人正在堆叠?

时间:2018-05-08 06:48:25

标签: php laravel email laravel-5

我正在尝试批量发送电子邮件给用户。我根据laravel文档设置了队列和主管,但邮件中的收件人正在堆叠,我真的不知道什么是错的,因为代码中的一切看起来都很好。这是我如何排队邮件。

$message = (new \App\Mail\EmailUpdate(request('subject'),request('message')))->onQueue('emailsDefault');
foreach($users as $user){
    \Mail::to($user)->queue($message);
}

我认为从数据库中选择一部分用户肯定存在一些问题。但是我尝试了php artisan tinker,它显示了完美的结果。以下是我从数据库中获取用户的方法。

$users = User::join('user_metas','users.id','=','user_metas.user_id')
             ->where('meta_key','plan')
             ->where('meta_value','free')
             ->select('users.id')
             ->get();

在电子邮件的收件人部分,我可以看到收件人数量的增加。这是它在mailtrap.io中的样子。

Check the 'to' part of the emails

任何帮助将不胜感激。我不知道我在这里失踪了什么。这是我的 EmailUpdate Mailable

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class EmailUpdate extends Mailable
{
    use Queueable, SerializesModels;

    public $subject;
    public $update;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($subject,$update)
    {
        $this->subject = $subject;
        $this->update = $update;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.emailUpdate')
                    ->subject($this->subject);
    }
}

2 个答案:

答案 0 :(得分:0)

让我们尝试一下代码的小型重构。

$users = User::join('user_metas','users.id','=','user_metas.user_id')
             ->where('meta_key','plan')
             ->where('meta_value','free')
             ->select('users.id')
             ->get();

$email = new \App\Mail\EmailUpdate(request('subject'),request('message')));
    foreach ($users as $user) {
        Mail::queue(email);
    }

这是因为我不确定你的: 邮件::至() - &GT;队列();

无论如何最后检查,fail_jobs表中是否有任何作业失败?

答案 1 :(得分:0)

我更新了以下代码:

$message = (new \App\Mail\EmailUpdate(request('subject'),request('message')))->onQueue('emailsDefault');
foreach($users as $user){
    \Mail::to($user)->queue($message);
}

到以下代码:

foreach($users as $user){
    $message = (new \App\Mail\EmailUpdate(request('subject'),request('message')))->onQueue('emailsDefault');
    \Mail::to($user)->queue($message);
}

它正在发挥作用!我不知道为什么会这样,因为我们没有在$message实例中定义用户。如果有人知道为什么会发生这种情况的原因,我很想知道。