【问题标题】:Check mail is sent successfully or not on Laravel 5在 Laravel 5 上检查邮件是否发送成功
【发布时间】:2015-12-29 04:47:09
【问题描述】:

我有一个可以使用这个在 Laravel5 上发送邮件的功能

/**
 *  Send Mail from Parts Specification Form
 */
 public function sendMail(Request $request) {
    $data = $request->all();

    $messageBody = $this->getMessageBody($data);

    Mail::raw($messageBody, function ($message) {
        $message->from('yourEmail@domain.com', 'Learning Laravel');
        $message->to('goper.zosa@gmail.com');
        $message->subject('Learning Laravel test email');
    });

    return redirect()->back();
 }

 /**
  * Return message body from Parts Specification Form
  * @param object $data
  * @return string
  */
 private function getMessageBody($data) {

    $messageBody = 'dummy dummy dummy dummy';
 }

并且发送成功。但是如何检查它是否已发送?喜欢

if (Mail::sent == 'error') {
 echo 'Mail not sent';
} else {
 echo 'Mail sent successfully.';
}

我只是在猜测那个代码。

【问题讨论】:

  • 你试过Mail::failures()
  • @haakym 如何更改我的代码以查看该代码是否有效?要解雇那种方法?谢谢
  • 是的,我用那个,谢谢。但是如何知道这是否有效?
  • 如果failures()没有返回任何东西,那么它已经发送成功了。

标签: laravel smtp laravel-5 sendmail


【解决方案1】:

希望对你有帮助

Mail::failures() 将返回一组失败的电子邮件。

Mail::send(...)

if( count(Mail::failures()) > 0 ) {

   echo "There was one or more failures. They were: <br />";

   foreach(Mail::failures() as $email_address) {
       echo " - $email_address <br />";
    }

} else {
    echo "No errors, all sent successfully!";
}

来源:http://laravel.io/forum/08-08-2014-how-to-know-if-e-mail-was-sent

【讨论】:

【解决方案2】:

我不完全确定这会奏效,但你可以试一试

/**
 *  Send Mail from Parts Specification Form
 */
public function sendMail(Request $request) {
    $data = $request->all();

    $messageBody = $this->getMessageBody($data);

    Mail::raw($messageBody, function ($message) {
        $message->from('yourEmail@domain.com', 'Learning Laravel');
        $message->to('goper.zosa@gmail.com');
        $message->subject('Learning Laravel test email');
    });

    // check for failures
    if (Mail::failures()) {
        // return response showing failed emails
    }

    // otherwise everything is okay ...
    return redirect()->back();
}

【讨论】:

  • 我不认为有成功次数的等效方法吗? Mail::successes()Call to undefined method 一起引发错误。
  • laravel.com/api/5.2/Illuminate/Mail/Mailer.html 不。只需将收件人数减去失败数,即可获得成功数。
  • 我收到“显示失败电子邮件的回复”我现在该怎么办?
  • @YoussefBoudaya 您想调试失败的电子邮件吗?你检查过你的错误日志吗?您可能还想深入了解 laravel 和 swiftmailer 代码库,看看是什么决定了一封电子邮件是否失败。
  • 很好的解释,但我有另一种好奇心。例如,假设一个电子邮件地址是有效的,但由于 Internet 断开连接或其他原因可能是因为电子邮件地址无效而无法正确发送。 laravel 可以给出警告吗?
【解决方案3】:

您还可以使用“Swift_TransportException”来识别任何错误。

try{

   //code to send the mail

}catch(\Swift_TransportException $transportExp){
  //$transportExp->getMessage();
}

【讨论】:

    【解决方案4】:

    您可以为此使用 Mail::failures() 函数。 如果存在,它将包含一组失败的邮件,因此您可以使用下面的代码来检查它。

    public function sendMail(Request $request) {
        $data = $request->all();
    
        $messageBody = $this->getMessageBody($data);
    
        Mail::raw($messageBody, function ($message) use ($messageBody) {
            $message->from('yourEmail@domain.com', 'Learning Laravel');
            $message->to('goper.zosa@gmail.com');
            $message->subject($messageBody); 
        });
    
        // check for failed ones
        if (Mail::failures()) {
            // return failed mails
            return new Error(Mail::failures()); 
        }
    
        // else do redirect back to normal
        return redirect()->back();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2011-10-04
      • 2013-04-02
      • 2016-06-16
      相关资源
      最近更新 更多