2017-06-05 133 views
1

我想在用戶註冊後發送一些電子郵件。 但是,它的工作。我沒有收到我的SMTP郵件中的電子郵件。我正在使用mailtrap.io。Laravel 5.2 - 用戶註冊後發送歡迎郵件

我已經設置了一個註冊事件,並且有一個監聽器給NewUserRegistered。

在我的NewUserRegistered 控制器\身份驗證\ AuthController如下:

<?php 

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use App\User; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Log; 
use Validator; 
use Mail; 

class AuthController extends Controller { 
    /* 
      |-------------------------------------------------------------------------- 
      | Registration & Login Controller 
      |-------------------------------------------------------------------------- 
      | 
      | This controller handles the registration of new users, as well as the 
      | authentication of existing users. By default, this controller uses 
      | a simple trait to add these behaviors. Why don't you explore it? 
      | 
    */ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    /** 
    * Where to redirect users after login/registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/'; 

    /** 
    * Create a new authentication controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() { 
     $this->middleware($this->guestMiddleware(), [ 
      'except' => 'logout' 
     ]); 



     } 



    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'matric' => 'required|max:5', 
      'faculty' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|min:6|confirmed', 
      'address' => 'required', 
      'phone' => 'required', 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) { 


     return User::create([ 
      'name' => $data['name'], 
      'matric' => $data['matric'], 
      'faculty' => $data['faculty'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
      'address' => $data['address'], 
      'phone' => $data['phone'], 
     ]); 

     event(new Registered($user)); 

    //sreturn User; 
    } 
} 

在我的註冊活動如下:

<?php 

namespace App\Events; 

use App\Events\Registered; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 

class Registered extends Event 
{ 
    use SerializesModels; 
    /** 
    * @var 
    */ 
    public $user; 

    /** 
    * Create a new event instance. 
    * 
    * @param $user 
    */ 
    public function __construct($user) 
    { 
     // 
     $this->user = $user; 
    } 

    /** 
    * Get the channels the event should be broadcast on. 
    * 
    * @return array 
    */ 
    public function broadcastOn() 
    { 
     return []; 
    } 
} 

在我的NewUserRegistered 聽衆如下:

<?php 


    namespace App\Listeners; 

    use App\Events\Registered; 
    use Illuminate\Queue\InteractsWithQueue; 
    use Illuminate\Contracts\Queue\ShouldQueue; 
    use Mailer; 
    use Mail; 

    class NewUserRegistered 
    { 
    /** 
    * Create the event listener. 
    * 
    * @return void 
    */ 
    public function __construct(Mailer $mailer) 
    { 
     $this->mailer = $mailer; 
    } 


    /** 
    * Handle the event. 
    * 
    * @param Registered $event 
    * @return void 
    */ 
    public function welcome(Registered $event) 
    { 
    $data = [ 
     'user' => $event->user, 
      'from' => '[email protected]', 
      'subject' => 'Welcome to test' 
    ]; 


     $this->mailer->send('emails.auth.verify', $data, function($message) { 
      $message->to($data['user']->email, $data['user']->matric) 
        ->subject($data['subject']); 
     }); 
    } 
} 
+0

您是否調試過您的應用程序? –

回答

1

一對夫婦有你的解決方案潛在的問題可能是:

  • 控制器\身份驗證\ AuthController,你有沒有進口Registered事件到命名空間。嘗試將use App\Events\Registered;添加到頂部。
  • NewUserRegistered,您已經定義了#welcome方法,但Laravel事件偵聽器期望使用#handle方法。 See the Laravel docs on Events瞭解更多信息。

除此之外,您可能遇到Mailtrap憑據問題。

0

您的活動永遠不會啓動,因爲您在創建用戶後返回用戶。您的代碼在嘗試時應該引發錯誤。將您的代碼更改爲此。

use App\Events\Registered; 

protected function create(array $data) 
{ 
    $user = User::create([ 
     'name' => $data['name'], 
     'matric' => $data['matric'], 
     'faculty' => $data['faculty'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'address' => $data['address'], 
     'phone' => $data['phone'], 
    ]); 

    event(new Registered($user)); 

    return $user; 
} 

此外一定要註冊您的事件監聽器。

相關問題