使用控制器或路由注册后发送电子邮件

时间:2017-01-11 06:39:34

标签: php laravel laravel-5.3 email-integration

我想向管理员发送电子邮件,而不是向用户发送要求注册新用户的电子邮件。我在控制器中试过这个

<?php

namespace App\Http\Controllers\Auth;
use Mail;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Jrean\UserVerification\Traits\VerifiesUsers;
use Jrean\UserVerification\Facades\UserVerification;


 class RegisterController extends Controller
 {

  use RegistersUsers;


  protected $redirectTo = '/regmessage';



 public function __construct()
 {
    $this->middleware('guest');
 }

 /**
 * 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',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
        'usertype' => 'required',
    ]);
 }

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return User
 */
  protected function create(array $data)
  {
    //dd($data);
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'usertype' =>$data['usertype'],
        'status' => 0,
    ]);
    $user = array('name' => 'Admin');

    Mail::send('emails.reminder', $user, function ($m) {


        $m->to('mrbbangladesh2017@gmail.com')
        ->subject('Confirm email');
    });
  }

  /*public function sendEmailReminder(Request $request, $id)
  {
    $user = User::findOrFail($id);

    Mail::send('emails.reminder', ['user' => $user],
    function ($m) use($user) {


        $m->to('mrbbangladesh2017@gmail.com')
        ->subject('Confirm email');
       });
    }*/

 }

并且我也在route.php中尝试了这个。在路由中执行此操作后,电子邮件正在发送,但注册表单值没有插入到数据库中。我需要在这做什么?

Route::post('/register',function() 
{
$data = array('name' => 'Admin');

Mail::send('emailMessage', $data, function($message)
{
    $message->to('mrbbangladesh2017@gmail.com')
    ->subject('Confirm email');
});

return view('regmessage');
});

4 个答案:

答案 0 :(得分:1)

我认为您的控制器代码需要更新如下:

protected function create(array $data)
 {
   //dd($data);
   $user = User::create([
       'name' => $data['name'],
       'email' => $data['email'],
       'password' => bcrypt($data['password']),
       'usertype' =>$data['usertype'],
       'status' => 0,
   ]);
   $use = array('name' => 'Admin');

   Mail::send('emails.reminder', $use, function ($m) {

       $m->from('your from email address')
       $m->to('mrbbangladesh2017@gmail.com')
       $m->subject('Confirm email');
   });
  return $user;
 }

<强>更新
做出改变: Mail::send('emails.reminder', $use, function ($m) use($data){...}并使用$data['email']

希望这对你有用!

答案 1 :(得分:1)

虽然这是固执己见的,但我发现当你想对模型的事件作出反应时(在这种情况下,是用户创建),最好挂钩在模型的启动方法中捕获该事件。此外,请勿以阻止服务器响应的方式发送电子邮件。 Job更好地处理这个功能。

首先,创建处理此问题的作业:

php artisan make:job SendAdminEmailOnUserCreation

打开新作业,然后找到句柄功能。

public function handle(Illuminate\Mail\Mailer $mail)
{
    $mail->send('emails.reminder', ['name' => 'Admin'], function ($message) {
        $message->from('me@my-domain.com')
            ->to('admin@my-domain.com')
            ->subject('A new user has registered');
    });
}

接下来,确保您的工作实现了ShouldQueue工厂:

class SendAdminEmailOnUserCreation implements ShouldQueue {

然后在你的App\User模型中:

public static function boot () 
{
    parent::boot();

    User::created(function(){
        dispatch(new SendAdminEmailOnUserCreation());
    });
}

最后,请确保您的队列正在运行,以便正确处理此作业:

php artisan queue:listen

注意

在您的问题中,您使用的是emails.reminder,如果它与emails.auth.reminder类似,则需要$token变量。否则,如果您已对此进行了修改,请确保它所查找的唯一变量为$name,否则您将收到错误。

希望这会有所帮助。

答案 2 :(得分:0)

在控制器中编辑我的创建功能后,我得到了结果...我的值是插入数据库,并且电子邮件正在向amin发送请求注册用户。这是我的代码

 protected function create(array $data)
{
    //dd($data);

    $user=User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'usertype' =>$data['usertype'],
        'status' => 0,
    ]);
    $use = array('name' => 'Admin');

 Mail::send('emailMessage', $use, function ($m) {

 $m->to('mrbbangladesh2017@gmail.com')
   ->subject('Confirm email');
    });
 return $user;
}

感谢大家的帮助

答案 3 :(得分:0)

尝试:

 Mail::send('emailMessage', $use, function ($m) {
 $m->to('To email id')
   ->subject('Confirm email');
 $m->from('From email id');   
    });