web-dev-qa-db-ja.com

laravel Mail :: failedures()関数はどのように機能しますか?

laravel Mail::send()関数を使用してメールを受信しなかった受信者のリストを取得しようとしています。次のコードを試しています。forループは各ユーザーがカスタマイズされたメッセージを受信するために使用されます。

// First recipient is actual, the second is dummy.
$mail_to_users = ["[email protected]","[email protected]"];
$failures = [];

foreach($mail_to_users as $mail_to_user) {
   Mail::send('email', [], function($msg) use ($mail_to_user){
     $msg->to($mail_to_user);
     $msg->subject("Document Shared");
   });

   if( count( Mail::failures() ) > 0 ) {
      $failures[] = Mail::failures()[0];
   }
}

print_r($failures);

私はすべての可能なオプションを試してきました。 config/mail.phpの正しいメール設定を間違ったものに変更しました。しかし、これを行うと、laravelはエラーページを表示しますが、$failure変数は常に空を返します。

9
Rajan Rawal

メールが実際に受信者に届いたかどうかを確認する方法はないと思います。電子メールが有効である限り(ダミーであっても)、trueを返します。ただし、Mail :: failedures()の代わりに、次のようにtrycatchブロックを使用できます。

foreach ($mail_to_users as $mail_to_user) {
            try {
                Mail::send('email', [], function($msg) use ($mail_to_user) {
                    $msg->to($mail_to_user);
                    $msg->subject("Document Shared");
                });
            } catch (Exception $e) {

                if (count(Mail::failures()) > 0) {
                    $failures[] = $mail_to_user;
                }
            }
        }
2
Hasan Tareque