Почему получатели в очереди почты Laravel складываются? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь отправить электронную почту пользователям навалом. Я настроил очередь и супервизора в соответствии с документацией laravel, но получатели в Mail складываются, и я действительно не знаю, что не так, потому что в коде все выглядит хорошо. Вот как я в очереди почты.

$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 голосов
/ 08 мая 2018

Я обновил следующий код:

$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. Если кто-то знает причину, по которой это происходит так, как это происходит, мне очень интересно узнать.

0 голосов
/ 08 мая 2018

Давайте попробуем небольшой рефакторинг кода.

$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 :: к () -> очереди ();

В любом случае, последняя проверка, есть ли сбой задания в таблице failed_jobs?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...