Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send mail after Laravel 5 default registration?

Tags:

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 features:

  1. User will get an email just after registration.
  2. Upon saving of user registration, I need to make an entry in another role table (I've used Entrust package for role management)

How to do these things?

like image 949
Sovon Avatar asked Mar 20 '15 18:03

Sovon


People also ask

How do I send email to admin in laravel?

user should be logged with email and click the verification link. 3. then after click user verification link an email should send to the admin with user data.

Can we send mail from localhost in laravel?

Laravel 8 provides a mail class for sending an email. So, we would like to show you send an email from localhost using mailable in laravel 8 applications. Note that, you can use several SMTP drivers details (Mailgun, Postmark, Amazon SES, and sendmail) in . env file for sending email in laravel 8.


2 Answers

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('[email protected]', "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

like image 140
Emeka Mbah Avatar answered Sep 25 '22 20:09

Emeka Mbah


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.

like image 34
Sinan Eldem Avatar answered Sep 22 '22 20:09

Sinan Eldem