Laravel で複数のジョブを送信するのに問題があります。
時々それは大丈夫です。
時々、このメッセージcannot send message without a sender address
がfailed_job
表に表示され、1つだけが機能しました。
両方が機能しない場合もあります。
それは私のローカルにありますが、サーバー上ではまったく機能していません。
キャッシュ、構成、すべてをクリアしようとしていますが、まったく機能しません。
私の設定が.env
原因で常にエラーが発生するとは限らないため、私はそれを考えていません。
時々エラーが発生することがあります。
最も一般的なエラーは、1 つが機能し、1 つが機能しないことです。
1つのジョブを実行するだけで、1つのジョブがfailed_job
テーブルに失敗します
ジョブ
class SendContactContentEmail implements ShouldQueue
{
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $data;
public $emails;
public $tries = 5;
/**
* Create a new job instance.
*
* @param array $_data
*/
public function __construct(
$_data
)
{
$this->data = $_data;
$this->emails = config('email.admin');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$content = new ContactContentEmail($this->data);
if (!empty($this->emails)){
foreach ($this->emails as $email){
Mail::to($email)->send($content);
}
}
}
}
class SendContactEmail implements ShouldQueue
{
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $email_address;
public $tries = 5;
/**
* Create a new job instance.
*
* @param string $_email_address
*/
public function __construct(
string $_email_address
)
{
$this->email_address = $_email_address;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$email = new ContactEmail();
Mail::to($this->email_address)->send($email);
}
}
メール
class ContactContentEmail extends Mailable
{
use Queueable, SerializesModels;
protected $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($_data)
{
$this->data = $_data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('contact.emails.contact_content')->with([
'data' => $this->data
]);
}
}
class ContactEmail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('contact.emails.contact');
}
}
コントローラ
public function send(ContactFormRequest $request){
$data = $request->validated();
dispatch(new SendContactContentEmail($data));
dispatch(new SendContactEmail($data['mail_address']));
}
メールの設定
return [
'admin' => [
'kuriyama' => 'xxxx@gmail.com',
'negishi' => 'aaaa@gmail.com',
]
];
ENV
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=contact@xxx.com.vn
MAIL_PASSWORD=xxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xxx@xxx.com
MAIL_FROM_NAME="${APP_NAME}"