Envio de emails con Laravel 5.3

- seguce92 - Laravel

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 activación o en todo caso simplemente un email de suscripción o ficha de suscripción.

Para este propósito en laravel tenemos lo necesario para realizar la lógica 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 envío 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;

  public function __construct()
  {
      //
  }

  public function build()
  {
    return $this->view('view.name');
  }
}

En este ejemplo enviaremos un email con la información de su registro en nuestra web, para lo cual nuestra clase SendEmail.php quedaría 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;

  protected $user;
  
  public function __construct(User $user)
  {
    $this->user = $user;
  }

  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>Detalles de tu cuenta</p>
<a href="{ url('/login') }">clic aqui para iniciar sesion</a>

Ahora para realizar el envío 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
{
  use RegistersUsers;

  protected $redirectTo = '/home';

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

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

  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 informació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 configuración que se realiza en el anterior archivo indirectamente se aplica esos cambios al archivo config/mail.php, a excepción de la sección from. Dicha sección contiene la información de la dirección 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 configuración se la realizo específicamente para enviar emails con gmail, en la segunda parte de este articulo realizaremos la configuración para envío de emails desde un host o servidor compartido (cpanel).

Post Relacionados