[英]Why recipients in Laravel Mail queue are stacking up?
我正在嘗試向用戶批量發送電子郵件。 我根據 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);
}
}
我更新了以下代碼:
$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 = 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 表中是否有任何作業失敗?
您可以將可郵寄對象的“to”屬性設置為空
$message = (new \App\Mail\EmailUpdate(request('subject'),request('message')))->onQueue('emailsDefault');
foreach($users as $user){
$message->to = [];
\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);
}
為什么? Idk,顯然每個 Mail::to() 迭代都在 to 屬性中堆疊地址而不是設置一個新地址。
享受 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.