Envio De Emails Con Laravel 5.3

Al momento de desarrollar un blog u otro tipo de proyecto web, surge la necesidad de enviar un email ya se con las credenciales de usuario, con la url de activacion o en todo caso simplemente un email de suscripcion o ficha de suscripcion. Para este proposito en laravel tenemos lo necesario para realizar la logica de envio. Lo primero que necesitamos es agregar el package guzzlehttp atraves de composer.

composer require guzzlehttp/guzzle

Una vez agregado el package, nuevamente acudimos a la terminal, pero esta vez para crear un nueva clase para el envio de email

php artisan make:mail SendEmail

El comando anterior genera la siguiente clase, que se encuentra en \app\Mail\SendEmail.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('view.name');
    }
}

En este ejemplo enviaremos un email con la informacion de su registro en nuestra web, para lo cual nuestra clase SendEmail.php quedaria de la siguiente forma:

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * @var User
     */
    protected $user;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        $user = $this->user;

        return $this->view('vendor.mail.register', compact('user'));
    }
}

La vista

Hola {{ $user->name}}
<p>te informamos que tu cuenta en mascodigo.net se registro exitosamente</p>
<table>
    <caption>Detalles de tu cuenta</caption>
    <tbody>
        <tr>
            <td>Usuario:</td>
            <td>{{ $user->email }}</td>
        </tr>
        <tr>
            <td>Contraseña:</td>
            <td>Tu Contraseña</td>
        </tr>
    </tbody>
</table>
<p><a href="/login">clic aqui para iniciar sesion</a></p>

Ahora para realizar el envio modificamos \app\Http\Controllers\Auth\RegisterController.php

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;

use Illuminate\Support\Facades\Mail;
use App\Mail\RegisterMail;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    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',
        ]);
    }

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

        Mail::to($user)->send(new RegisterMail($user));

        return $user;
    }
}

Por ultimo, lo único que falta es editar la infomación del archivo .env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=micorreoseguce@gmail.com
MAIL_PASSWORD=xxxxxxxxxx
MAIL_ENCRYPTION=tls

Toda la configuracion que se realiza en el anterior archivo indirectamente se aplica esos cambios al archivo config/mail.php, a excepcion de la seccion from. Dicha seccion contiene la informacion de la direccion email y nombre con el cual se enviará el email.

'from' => [
    'address' => 'micorreoseguce@gmail.com',
    'name' => 'seguce92',
],

Con eso concluimos la configuración para enviar emails, ahora lo único que queda es poner en marcha. NOTA: esta configuracion se la realizo especificamente para enviar emails con gmail, en la segunda parte de este articulo realizaremos la configuracion para envio de emails desde un host o servidor compartido (cpanel).

Escribe tu comentario