【问题标题】:Laravel 5 - How Do You Catch an Mail::send() Error?Laravel 5 - 你如何捕获 Mail::send() 错误?
【发布时间】:2017-01-06 20:33:06
【问题描述】:

我有以下发送电子邮件的方法:

Mail::send('emails.configuration_test', array(), function($email)use($request){
    $email->to($request->test_address)->subject('Configuration Test');
});

如果出现上述错误,我希望能够捕获异常。当我使用以下内容时:

try{
    Mail::send('emails.configuration_test', array(), function($email)use($request){
        $email->to($request->test_address)->subject('Configuration Test');
    });
}
catch(Exception $e){
    // Never reached
}

异常永远不会被捕获。相反,如果 send() 方法出错,我会得到一个 Laravel 堆栈跟踪作为响应。

在这种情况下如何捕获异常?

【问题讨论】:

  • 如果文件是命名空间的,你需要catch(\Exception $e)(或者把use Exception放在文件的顶部)。现在,它可能正在捕获类似App\Http\Controllers\Exception 的内容。 php.net/manual/en/language.namespaces.php
  • 或者在顶部导入。我认为他有。
  • @devk 如果他在catch(Exception $e) 之后得到堆栈跟踪,他没有。
  • @ceejayoz 够公平的。我以为你会收到 Laravel 异常消息。
  • @devk 所有 Laravel 异常最终都是根 \Exception 的子类(或子子子子类),因此如果处理正确,捕获 \Exception 应该涵盖所有内容。

标签: laravel laravel-5 laravel-mail


【解决方案1】:

使用根命名空间\Exception 成功了。

代替:

catch(Exception $e){
    // Never reached
}

我用过:

catch(\Exception $e){
    // Get error here
}

【讨论】:

  • 这真的是使用异常的好方法吗?我们不能为邮件发送错误创建一个更具体的异常并捕获它吗?我正在搜索框架以查找要捕获的此类异常,但找不到一个:(我想这里的主要目标是在邮件发送失败时让代码继续运行,而不是停止执行和中止。但是捕获的普遍例外并没有很清楚地表达这种意图。只是我的看法。
  • 已经意识到这里的关键是 laravel 使用 Symfony swift mailer,所以只需要查看文档,而不是 laravel。
猜你喜欢
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 2011-01-20
相关资源
最近更新 更多