Php 为什么Laravel邮件队列中的收件人会堆积起来?

Php 为什么Laravel邮件队列中的收件人会堆积起来?,php,laravel,email,laravel-5,Php,Laravel,Email,Laravel 5,我正在尝试批量向用户发送电子邮件。我根据laravel文档设置了队列和主管,但邮件中的收件人正在堆积,我真的不知道出了什么问题,因为代码中的一切看起来都很好。下面是我如何排队的邮件 $message = (new \App\Mail\EmailUpdate(request('subject'),request('message')))->onQueue('emailsDefault'); foreach($users as $user){ \Mail::to($user)->

我正在尝试批量向用户发送电子邮件。我根据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中的情况

任何帮助都将不胜感激。我不知道我错过了什么。这是我的电子邮件更新邮件

<?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);
    }
}

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

$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);
    }
因为我不确定你的: Mail::to()->queue()


无论如何,上一次检查,failed_jobs表中是否有任何作业失败?

我更新了以下代码:

$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 = (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
实例中定义用户。如果有人知道这种情况发生的原因,我很想知道。

在循环结束时是否将$users重置为NULL?如果没有,那就是你的问题了。但是这个循环只执行一次。更重要的是,我使用的是
foreach
循环,这意味着每封电子邮件都是单独排队的,对吗?我们怎么知道循环只运行一次,你几乎没有做过一次MCVECool!你知道吗。也许你应该再读一遍这篇文章。我只是在尝试为一组用户排队。你不能真正理解这个问题。正确的?最好自己找到解决办法。它总是有效的。我向你展示了我是如何获得用户集合的。我向你展示了我是如何排队发送电子邮件的。我还向你展示了我得到的结果。这怎么不是一个奇怪的MCVE!真的,兄弟,如果你不能理解这个问题,你可以忽略它。事实上,你写的代码根本没有发送电子邮件。这很明显,因为您在发送电子邮件时没有定义用户。失败的工作中没有工作。对不起,先生,还是一大早。请使用电子邮件更新您的问题update Mailable解决了问题。将其作为答案发布。请在问题中显示您的EmailUpdate mailable!请稍等,请查收。我已经用mailable更新了问题。好的,我知道了!我认为前面代码的问题在于,我向多个用户发送了相同的消息,而不知何故,Laravel一直在将用户嵌入到消息的接收者。