我正在尝试批量发送电子邮件给用户。我根据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中的样子。
任何帮助将不胜感激。我不知道我在这里失踪了什么。这是我的 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);
}
}
答案 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
实例中定义用户。如果有人知道为什么会发生这种情况的原因,我很想知道。