laravel Mail :: failures()函数如何工作?

时间:2015-08-17 07:48:11

标签: php email laravel laravel-4 swiftmailer

我一直在尝试使用laravel Mail::send()功能获取未收到电子邮件的收件人列表。我正在尝试下面的代码。使用for循环是因为每个用户都要收到自定义消息。

// First recipient is actual, the second is dummy.
$mail_to_users = ["original_account@domain.com","dummy_account@domain.com"];
$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变量总是返回空。

2 个答案:

答案 0 :(得分:0)

我认为没有办法检查电子邮件是否真的去了收件人。只要电子邮件有效(即使是虚拟),它将返回true。但是,您可以使用try catch块而不是Mail :: failures(),如下所示:

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;
                }
            }
        }

答案 1 :(得分:0)

我正在处理类似的问题。当电子邮件发送失败时,我想用它做一些事情。我阅读了源代码,Illuminate\Mail\SendQueuedMailable::failed() 方法表明我们可以在 Mailable 对象中添加一个 failed 方法来处理电子邮件失败时的 $exception。

所以我们可以这样做:

class SampleMail extends Mailable
{
    public function failed($e)
    {
        // Do something with the exception when the email fails.
    }
}

据我所知,这只适用于排队的邮件。