2017-08-22 65 views
11

日安傢伙,Laravel 5 SwiftMailer的Send:如何獲取錯誤代碼

我送類似這樣的電子郵件:Laravel 5: Sending Email。這就是我要做的事:

$mail_status = Mail::send('emails.followup', $data, function($message) use ($data) { 
      $message->to($data['email']) 
      ->from($data['email_from'], $data['email_name']) 
      ->subject($data['subject']); 
     }); 

if($mail_status) { 
    $ret_status = 'sent'; 
} 
else 
    $ret_status = 'sent_failed'; 

現在,如果$ret_status是「sent_failed」,我想知道發生了什麼。我該怎麼做?我怎樣才能看到來自郵件服務器的消息?

這裏是我的.env文件:

MAIL_DRIVER=smtp 
MAIL_HOST=mail.mydomain.com 
MAIL_PORT=465 
[email protected] 
MAIL_PASSWORD=thepassword 
MAIL_ENCRYPTION=ssl 

UPDATE:

看起來像上面的方法是Laravel 4.如果你知道如何使用Laravel 5+錯誤代碼,我可以考慮它作爲正確的答案。

回答

6

您可以使用try catch,也可以在不進入功能範圍的情況下誤認爲使用$email, $email_from, $email_name, $subject

try{ 
    $mail_status = Mail::send('emails.followup', $data, function($message) use ($data, $email, $email_from, $email_name, $subject) { 
         $message->to($email) 
         ->from($email_from, $email_name) 
         ->subject($subject); 
        }); 
    //If error from Mail::send 
    if($mail_status->failures() > 0){ 
     //Fail for which email address... 
     foreach(Mail::failures as $address) { 
      print $address . ', '; 
     } 
     exit; 
    } 
} 
catch(\Exception $e){ 
    // Get error here 
    print $e->getMessage(); 
    exit; 
} 

對於電子郵件地址添加故障打印檢查電子郵件失敗哪個地址。

+0

@ user1506104:檢查這個答案,希望大家從中得到 –

+0

打招呼的解決方案。這沒有奏效。任何其他建議? @AddWeb – user1506104

+0

什麼'print $ e-> getMessage();'爲你? –

5

Mail::send()之後立即檢查Mail::failures()將返回一組嘗試發送電子郵件的失敗電子郵件地址。

但是,據我所知,使用Mail facade無法獲得確切的錯誤。爲此,您需要在.env上設置調試真並檢查Laravel日誌。

+0

發送郵件,日誌也沒有給我任何東西。感謝您的建議。 +1 – user1506104

3
  1. 爲了得到錯誤的開發版本(在屏幕上),在您的.ENV文件中設置APP_DEBUG=true
  2. 得到確切的消息,請做嘗試捕捉,但趕上Swift_TransportExceptionhttps://stackoverflow.com/a/42221501/2119863
  3. 您還可以,如果需要,通過app('mailer')獲得郵件實例並在那裏做一些研究。

這裏是一個工作示例:

try{ 
    $mail_status = Mail::send('emails.followup', $data, function($message) use ($data) { 
     $message->to($data['email']) 
     ->from($data['email_from'], $data['email_name']) 
     ->subject($data['subject']); 
    }); 
}catch(\Swift_TransportException $e){ 
    dd($e, app('mailer')); 
} 

dd()結果:

Swift_TransportException {#237 ▼ 
    #message: """ 
    Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required\r\n 
    " 
    """ 
    #code: 530 
    #file: ...