Uso de SendGrid como su transmisión de SMTP en Laravel PHP

April 11, 2019
Redactado por
Ankit Jain
Colaborador
Las opiniones expresadas por los colaboradores de Twilio son propias.

Uso de SendGrid como su transmisión de SMTP en Laravel PHP

Introducción

Laravel es uno de los marcos más famosos de Modelo-Vista-Controlador (MVC, por sus siglas en inglés) de PHP con una gran comunidad. Ofrece todas las funciones necesarias para crear su proyecto, ya sea para uso personal o empresarial. Laravel admite de forma predeterminada una amplia gama de proveedores de SMTP, pero en este momento SendGrid no está disponible en modo listo para usar para nosotros.

Este tutorial lo ayudará a implementar SendGrid para enviar correos electrónicos a través de SMTP. Una vez que hayamos terminado, tendrá una aplicación de Laravel en funcionamiento que le permitirá enviar correos electrónicos a usuarios registrados mediante SendGrid. Un beneficio adicional es que podremos comprobar si el usuario lee o abre su correo electrónico.

Requisitos

  1. Entorno de desarrollo PHP con Laravel
  2. Composer instalado de forma global
  3. Cuenta de SendGrid
  4. Passion :D

Configurar un nuevo proyecto de Laravel

Si no tiene instalado Laravel en su sistema, instálelo primero desde la documentación oficial de Laravel. Puede encontrar una guía para comenzar desde Laravel en los documentos de Laravel. Comencemos con la configuración de un nuevo proyecto de Laravel llamado “laravel-email”. Recuerde que puede asignar el nombre que desee a su proyecto.

$ laravel new laravel-email

Esto instalará Laravel v5.8 junto con todas las dependencias necesarias. Los scripts post-create de Composer crean de forma automática el archivo .env para nosotros y establecen la variable de entorno APP_KEY. Agregue el APP_KEY en el archivo .env ejecutando este comando si no está configurado automáticamente.

$ php artisan key:generate

A continuación, debemos agregar los detalles de conexión de la base de datos a nuestro archivo .env. Utilizaremos la base de datos MySQL para este proyecto. Después de crear su base de datos local, agregue los valores DB_USERNAME, DB_PASSWORD y DB_DATABASE en el archivo .env.

Creación de una cuenta de SendGrid

Antes de continuar, configuremos una cuenta Twilio SendGrid para el correo electrónico. Sí, SendGrid ahora es parte de Twilio, lo que potencia el futuro de la interacción con el cliente en una plataforma.

Una vez que hayamos terminado de configurar la cuenta, vamos a crear un controlador de correo para nuestra aplicación de Laravel. Laravel es compatible con las funciones mail() de SMTP y PHP. De forma predeterminada, Laravel está configurado para correo SMTP. Creemos una transmisión de SMTP para configurar SMTP e integrar en facilidad el servicio de correo electrónico dentro de nuestra aplicación de Laravel.

Captura de pantalla de SendGrid con SMTP Relay tutorial paso a paso

Ahora, crearemos una clave de API para conectarnos a nuestra cuenta de SendGrid. Asegúrese de darle un nombre a su clave. Llamé a mi clave “laravel-email”. Si hace clic en el botón “Create Key” (Crear clave) se generará la contraseña del nombre de usuario asociado, es decir, apikey.

Una vez que se hayan completado estos pasos, complete el archivo .env con sus credenciales de la siguiente manera:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=25
MAIL_USERNAME=apikey
MAIL_PASSWORD=<PASSWORD>
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=ankitjain28may77@gmail.com
MAIL_FROM_NAME="Ankit Jain"

Esto configurará el controlador de correo de Laravel para la configuración de SendGrid, que podemos verificar en el archivo mail.php en el directorio de configuración. También hemos agregado las claves de env MAIL_FROM_ADDRESS and MAIL_FROM_NAME en el archivo .env para que podamos leer el nombre y la dirección más adelante. Verificaremos la integración una vez que hayamos terminado de codificar nuestra app.

Creación de un andamiaje de autenticación para iniciar sesión o registrarse

Laravel hace que la implementación de la autenticación sea muy sencilla. De hecho, casi todo está configurado listo para usar para usted. Si no está familiarizado con esto, puede leer más acerca de la autenticación de Laravel en la documentación.

Ejecute este comando para agregar el andamiaje de autenticación a nuestro proyecto de Laravel.

$ php artisan make:auth

Esto generará el andamiaje de autenticación del proyecto. Laravel 5.7+ viene con la función de verificación de correo electrónico de forma predeterminada, por lo que primero usaremos la funcionalidad predeterminada. Más adelante, cambiaremos a las colas de Laravel para que podamos comprender ambas implementaciones.

Utilice la función verificación de correo electrónico

Para utilizar la función de verificación de correo electrónico, debemos asegurarnos de que nuestro modelo App\User implemente el contrato Illuminate\Contracts\Auth\MustVerifyEmail. Abra el archivo modelo App\User y realice los siguientes cambios:

# App\User
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements MustVerifyEmail
{
   use Notifiable;
   .
   .
   .
}

Nuestra tabla de migración de user ya está configurada con la columna email_verified_at y está establecida en anulable de manera predeterminada. Almacena la fecha y la hora en que se verifica la dirección de correo electrónico. Ejecute la migración de nuestra base de datos mediante la ejecución de este comando.

$ php artisan migrate

La verificación de correo electrónico es una función opcional que viene con Laravel. Solo tenemos que habilitar rutas para enviar enlaces de verificación y verificar los correos electrónicos. Esto se puede hacer simplemente pasando la opción verify al método Auth:routes(). Abra el archivo web.php en la carpeta routes (rutas) para habilitar esta opción.

Auth::routes(['verify' => true]);

Laravel viene con un middleware de ruta verified permitir el acceso solo a los usuarios verificados. Así que agreguemos esta ruta a la ruta de home de este modo:

Route::get('/home', 'HomeController@index')->name('home')->middleware('verified');

Ahora que hemos activado la función de verificación de correo electrónico, ejecute este comando para ejecutar la aplicación de Laravel.

$ php artisan serve

Nuestra app de Laravel está funcionando en localhost:8000. Vamos a probarla.

Pruebas

Captura de pantalla de Laravel ejecutándose con campos de registro

http://localhost:8000/register

Después del registro, veremos esta página, que muestra que nuestra aplicación de Laravel está funcionando como se esperaba. Revisemos un correo electrónico enviado por nuestra aplicación.

Observe que, si tratamos de acceder a la ruta /home, nuestra aplicación nos redirigirá a la ruta /email/verify, ya que agregamos el middleware verified. Si es curioso, intente iniciar sesión con o sin el middleware.

Captura de pantalla de Laravel con información de &#x27;verificar correo electrónico&#x27;.
Captura de pantalla de Gmail con enlace para verificar el correo electrónico.

Una vez verificado el correo electrónico, lo redirigiremos automáticamente a la ruta /home. Revisemos la actividad en el Panel de control de SendGrid para comprender mejor cómo funciona este proceso.

Captura de pantalla de SendGrid con registro de actividades

Como podemos ver, el registro de actividad de SendGrid nos muestra el estado completado de nuestros correos electrónicos. Envié dos correos electrónicos y, entre ellos, hice clic solo en uno, por lo que SendGrid muestra el estado de nuestro correo electrónico, ya sea que haga clic o no. ¡Es la belleza de SendGrid!

Conclusión

En este artículo, implementamos la forma predeterminada de enviar correos electrónicos en Laravel con SendGrid. En una publicación de seguimiento, extenderemos esa lógica mediante la implementación de las funciones de la cola de Laravel y aprenderemos acerca de audiencias, trabajos y clases que se pueden enviar por correo.

Este artículo fue traducido del original "Using SendGrid as Your SMTP Relay in Laravel PHP". Mientras estamos en nuestros procesos de traducción, nos encantaría recibir sus comentarios en help@twilio.com - las contribuciones valiosas pueden generar regalos de Twilio.