我想在用户注册后发送一些电子邮件。 但是,它做得很好。我的SMTP邮件中没有收到电子邮件。我正在使用mailtrap.io。
我已经设置了一个带有NewUserRegistered监听器的Registered事件。
在我的NewUserRegistered Controller \ Auth \ 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' => 'hello@test.dev',
'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 :(得分:2)
您的活动永远不会触发,因为您在创建用户后会返回该用户。尝试时,您的代码应该抛出错误。将您的代码更改为此。
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;
}
另外请务必注册您的事件监听器。
答案 1 :(得分:1)
您的解决方案可能存在以下几个潜在问题:
Registered
事件导入命名空间。尝试将use App\Events\Registered;
添加到顶部。#welcome
方法,但Laravel事件侦听器需要#handle
方法。 See the Laravel docs on Events了解更多信息。除此之外,您可能会遇到Mailtrap凭据问题。