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

Send email after registration using controller or route

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

<?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 中尝试过此操作..在发送电子邮件的路线中执行此操作后,但注册表值未插入到 database.what 我需要在这里做什么?

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');
});

我认为您的控制器代码需要像这样更新:

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'].

希望这对你有用!

虽然这是自以为是,但我发现当您想对模型的事件(在本例中为用户创建)做出反应时,最好在模型的引导方法中挂钩捕获该事件。此外,不要以阻止服务器响应的方式发送电子邮件。 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 否则您将收到错误消息。

希望这对您有所帮助。

在控制器中编辑我的创建函数后,我得到了结果...我的值正在插入到数据库中,并且一封电子邮件正在发送给 amin,要求用户成为 registered.here 的我的代码

 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;
}

感谢大家的帮助

尝试:

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