2015-12-31 53 views
0

我有以下功能postEmail在我的PasswordController.php和調用當用戶嘗試重置密碼。Laravel - 如何檢查成功發送給用戶的重置密碼郵件?

/** 
    * Send a reset link to the given user. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\Response 
    */ 
    public function postEmail(Request $request) 
    { 
     //echo Input::get('ID'); die; 
     $this->validate($request, ['ID' => 'required|email']); 

     // Pass data to reset password mail template 
     view()->composer('emails.password', function($view) { 
      $view->with([ 
       'UserProduct1' => 'UserProduct1', 
       'UserProduct2' => 'UserProduct2', 
      ]); 
     }); 

     $response = Password::sendResetLink($request->only('ID'), function (Message $message) { 
      $message->subject($this->getEmailSubject()); 
     }); 

     switch ($response) { 
      case Password::RESET_LINK_SENT: 
       return redirect()->back()->with('status', trans($response)); 

      case Password::INVALID_USER: 
       return redirect()->back()->withErrors(['ID' => trans($response)]); 
     } 
    } 

有沒有什麼辦法來檢查,重置郵件在發送laravel還是不給用戶。

任何想法?

謝謝。

+0

會有幾種方法來實現這一點。你可以通過在switch/case語句中添加一些邏輯來實現,或者只需添加一個檢查來查看是否有一行插入到密碼重置表中 - 如果密碼重置成功併發送了電子郵件,則會有一個在表中記錄。 – James

回答

0

如果使用Laravel 5.1梅勒類它很容易檢測,如果郵件被髮送

Sending Mail

<?php 

namespace App\Http\Controllers; 

use Mail; 
use App\User; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 

class UserController extends Controller 
{ 
    /** 
    * Send an e-mail reminder to the user. 
    * 
    * @param Request $request 
    * @param int $id 
    * @return Response 
    */ 
    public function sendEmailReminder(Request $request, $id) 
    { 
     $user = User::findOrFail($id); 

     $mailSend = Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) { 
      $m->from('[email protected]', 'Your Application'); 

      $m->to($user->email, $user->name)->subject('Your Reminder!'); 
     });//Here it returns 0 if email not send 

     if ($mailSend === 0) 
     { 
      //Your Code 
     } 
    } 
} 

在這裏,當你調用Mail::send它會調用這個方法https://github.com/laravel/framework/blob/5.1/src/Illuminate/Mail/Mailer.php#L157然後它會打電話sendSwiftMessagehttps://github.com/laravel/framework/blob/5.1/src/Illuminate/Mail/Mailer.php#L388。然後它會調用swiftmailer的send方法https://github.com/swiftmailer/swiftmailer/blob/5.x/lib/classes/Swift/Mailer.php#L74 &正如你所看到的,當它失敗時它會返回$發送的變量,如果失敗則爲0。

更多https://laravel.com/docs/5.1/mail#sending-mail

相關問題