Correos

Una vez creada una cuenta (por defecto no verificada), se le envía con un correo al email que se usó para registrarse con un código que debe utilizar por medio de un enlace, luego de abrir el link la cuenta es verificada.

1. Preparación del sistema para el envío de correos electrónicos

  • Descargar paquete

composer require guzzlehttp/guzzle
  • Seleccionar servicio de correo en archivo config/services.php

Se selecciona el servicio a utilizar para ello se deben añadir las variables de entorno al archivo .env y configurar los campos según los valores de las cuentas que se hayan creado en dichos servicios.

Por ejemplo en caso de usar mailgun se tiene:

MAILGUN_DOMAIN=
MAILGUN_SECRET=
  • Configurar servicio de correo en archivo config/mail.php

Driver

Según el servicio seleccionado, se debe especificar el mail driver (por ejemplo, colocar mailgun), y variables relacionadas con el mismo.

En este caso se utilizará el archivo de log para facilitar la depuración:

MAIL_DRIVER=log
# MAIL_HOST=smtp.mailtrap.io
# MAIL_PORT=2525
# MAIL_USERNAME=null
# MAIL_PASSWORD=null
# MAIL_ENCRYPTION=null

Configuración del remitente global --> Global "From" Address

Es la cuenta de correo que usará Laravel cada que envíe un mensaje.

Es recomendado utilizar en el MAIL_FROM_ADDRESS el mismo dominio del servicio de correo (mailgun, sparkpost), en este caso se utilizará el dominio local (@localhost) y como nombre el valor que se prefiera

Nota: los cambios realizados al .env deben agregarse al archivo .env.example

2. Implementar sistema de verificación

  • Crear ruta en routes/api.php

  • Crear método verify en User/UserController.php

3. Mailable para verificar usuarios creados

  • Crear Mailable usando php artisan

Un mailable es una clase que permite especificar los aspectos relacionados con el envío de correos electrónicos, como destinatario, tema, contenido, vista, etc...

Nota: los mailables (UserCreated) se guardan dentro de la carpeta app/Mail

  • Personalizar Mailable

Notas:

*Cualquier propiedad public definida en el mailable estará disponible en la vista

*En el método build, se puede retornar una versión en texto plano del correo usando el métodotext.Al igual que el método view, el métodotextacepta el nombre del template name que será usando para mostrar el contenido del email. Se pueden definir ambos simultáneamente

  • Crear vista que retornará el Mailable

Crear carpeta para guardar las vistas en views/emails. En este caso crear welcome.blade.php y personalizar mensaje que mostrará

  • Enviar correo de verificación usando evento del modelo User

En app/Providers/AppServiceProvider.php en el método boot()

  • Verificar funcionalidad con Postman

Crear un usuario

Teniendo en cuenta que el driver que estamos utilizando es log, cada que se envie un mail, este se registrará en el archivo de log de laravel, este se encuentra en storage/logs/laravel.log

Para verificar la cuenta, simular que el usuario abrió el link haciendo una petición get

Y finalmente, se tiene que la cuenta fue verificada

4. Vistas especialmente para correo electrónico --> Markdown

Permite utilizar etiquetas predefinidas en blade para facilitar la creación de interfaces para correos todas en html (tablas, títulos, ...).

Para crear un Mailable con un Markdown llamado prueba (en la carpeta views/emails) asociado

De esta manera se generan 2 archivos: la clase /app/Mail/Prueba.php

y la vista /resources/views/emails/prueba.blade.php

Así, se tiene un template con una estructura

  • Configurar templates usando etiquetas Markdown

Ahora, utilizando la estructura del Markdown, se procede a modificar la estructura de los templates de views/emails (en una próxima ocasión crear el Mailable con el Markdown directamente).

  • Modificar Mailable de UserCreated

En el método build especificar que se retornará un markdown, no text.

  • Verificar funcionalidad con Postman

Dentro del log se registra el código HTML generado con el Markdown

5. Mailable para validar un nuevo correo

En caso de que los usuarios cambien su correo electrónico

  • Crear Mailable

  • Personalizar Mailable

  • Crear vista que retornará el Mailable

Crear carpeta para guardar las vistas en views/emails. En este caso crear welcome.blade.php y personalizar mensaje que mostrará

  • Enviar correo de verificación

En app/Providers/AppServiceProvider.php en el método boot()

6. Reenviar correo de verificación

Esto con la finalidad de que el usuario pueda pedir le sea reenviado el correo de verificación en caso de no recibirlo, o si hubo algún problema y el correo no fue enviado

  • Crear ruta en routes/api.php

  • Crear método verify en User/UserController.php

  • Verificar funcionalidad con Postman

7. Manejar acciones propensas a errores

Lidiar con acciones que pueden ser propensas a fallas, por ejemplo el envío de correos, para esto se usará el helper. Este helper permite reintentar una misma acción en diferentes ocasiones en caso de haber fallado, con un máximo de intentos.

  • Añadir helper en los lugares en que se envíen correos (AppServiceProvider.php y UserController)

Nota: si la función falla, Laravel reintentará ejecutarla el número de veces fijadas en el retry. En caso de completar el número de intentos y no conseguir ejecutar la función será lanzada una excepción

Last updated

Was this helpful?