How to send mail after Laravel 5 default registration?

后端 未结 2 425
陌清茗
陌清茗 2020-12-24 13:25

I\'m noob in Laravel and working with Laravel 5. For user registration and and login, I want to use default system of laravel. But, need to extend it with two following feat

相关标签:
2条回答
  • 2020-12-24 14:07

    You can modify Laravel 5 default registrar located in app/services

    <?php namespace App\Services;
    
        use App\User;
        use Validator;
        use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
        use Mail;
    
        class Registrar implements RegistrarContract {
    
            /**
             * Get a validator for an incoming registration request.
             *
             * @param  array  $data
             * @return \Illuminate\Contracts\Validation\Validator
             */
            public function validator(array $data)
            {
                return Validator::make($data, [
                    'name' => 'required|max:255',
                    'email' => 'required|email|max:255|unique:users',
                    'password' => 'required|confirmed|min:6'
                ]);
            }
    
            /**
             * Create a new user instance after a valid registration.
             *
             * @param  array  $data
             * @return User
             */
            public function create(array $data)
            {
                $user = User::create([
                    'name' => $data['name'],
                    'email' => $data['email'],
                    'password' => \Hash::make($data['password']),
                    //generates a random string that is 20 characters long
                    'verification_code' => str_random(20)
                ]);
    
    //do your role stuffs here
    
                //send verification mail to user
                //---------------------------------------------------------
                $data['verification_code']  = $user->verification_code;
    
                Mail::send('emails.welcome', $data, function($message) use ($data)
                {
                    $message->from('no-reply@site.com', "Site name");
                    $message->subject("Welcome to site name");
                    $message->to($data['email']);
                });
    
    
                return $user;
            }
    
        }
    

    Inside resources/emails/welcome.blade.php

    Hey {{$name}}, Welcome to our website. <br>
    Please click <a href="{!! url('/verify', ['code'=>$verification_code]) !!}"> Here</a> to confirm email
    

    NB: You need to create route/controller for verify

    0 讨论(0)
  • 2020-12-24 14:31

    Laravel has an empty method named registered in Illuminate\Foundation\Auth\RegistersUsers trait to simplify this operation, just override it as following:

    First add a new Notification:

    <?php
    
    namespace App\Notifications;
    
    use Illuminate\Notifications\Messages\MailMessage;
    use Illuminate\Notifications\Notification;
    
    class UserRegisteredNotification extends Notification {
    
        public function __construct($user) {
            $this->user = $user;
        }
    
        public function via($notifiable) {
            return ['mail'];
        }
    
        public function toMail($notifiable) {
            return (new MailMessage)
                ->success()
                ->subject('Welcome')
                ->line('Dear ' . $this->user->name . ', we are happy to see you here.')
                ->action('Go to site', url('/'))
                ->line('Please tell your friends about us.');
        }
    
    }
    

    Add this use line to your RegisterController.php:

    use Illuminate\Http\Request;
    use App\Notifications\UserRegisteredNotification;
    

    and add this method:

    protected function registered(Request $request, $user) {
        $user->notify(new UserRegisteredNotification($user));
    }
    

    You are done.

    0 讨论(0)
提交回复
热议问题