Envío de mails

14/17

Lectura

Los emails del sistema

Algo muy común en las aplicaciones web es el envío de alertas a través de correo electrónico, a veces para notificar sobre algo que pasó mientras el usuario no estaba conectado, otras para solicitarle que realice alguna acción.

En nuestro caso, en la clase 1 habíamos visto que nuestro sistema deberá enviar correos cuando:

  1. Un candidato se postula a una oferta.
  2. Una empresa da de baja una oferta.

El componente mailer

PHP dispone de un mecanismo propio para realizar estos envíos: la función mail, sin embargo, se trata de una funcionalidad bastante tosca, por lo cual, no es raro que los frameworks hayan creado métodos más potentes.

En el caso de Symfony, disponemos de un componente llamado Mailer.

El Mailer está disponible para nosotros como un servicio más, sólo que para poder utilizarlo, debemos realizar algunos pasos de configuración previa.

El más importante es definir cómo se realizará el envío de esos correos.

Esto se consigue utilizando un componente llamado Transport.

El Mailer se encarga de la confección del correo, el Transport de su envío. De modo que un mismo Mailer puede utilizar diferentes tipos de Transport.

El más común (y el más fácil de configurar) es el SMTP.

Si dispones de una cuenta en algún servidor SMTP puedes agregar esto a tu archivo .env:

MAILER_DSN=smtp://user:[email protected]

Reemplazando por los datos reales por supuesto.

Una vez completa la configuración puedes empezar a enviar correos.

El correo a la empresa

Comencemos por el aviso a la empresa de que se ha registrado un nuevo postulante.

Este evento sucede cuando un candidato se postula, es decir, se dispara en el método OfferController::apply.

Como siempre, para utilizar el servicio Mailer necesitamos inyectarlo, es decir, cambiar la firma del método por:

public function apply(Offer $offer, EntityManagerInterface $entityManager, MailerInterface $mailer)

Luego podremos utilizarlo de este modo:

$email = (new Email())

   	->from('[email protected]')
   	->to($offer->getOwner()->getEmail())
   	->subject('Se recibió un nuevo postulante para '.$offer->getTitle().'!')
   	->html('<p>'.$applicant->getName().' está interesado/a. Su correo es '.$applicant->getEmail().'</p>')
;
$mailer->send($email);

Con eso alcanzará para que el responsable de la empresa reciba un correo con la alerta correspondiente.

El correo al postulante

Pues… no hay mucho misterio aquí… quedan algunas tareas por completar, es tu momento de brillar 😉

Si el correo debe salir en el momento en que una empresa elimine una oferta… ¡la empresa debe poder eliminar ofertas!

Para ello deberás:

  1. Generar un método en CompanyController llamado deleteOffer.
  2. Proveer a la empresa con un link para ejecutar dicho método.
  3. Antes de eliminar la oferta deberás recorrer el conjunto de todos los postulantes y a cada uno enviarle un aviso de que dicha oferta ya no está disponible.

Diversión asegurada, ¿cierto? 😃

Tómate un tiempito para completarlo y regresa para la próxima clase: el despliegue de tu aplicación (¿O acaso te creías que todo iba a terminar en tu computadora para siempre?)

Aportes 3

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Buena opción

https://mailtrap.io

genera la variable para Symfony 5+ MAILER_DSN al crear ‘Inbox’ en integración

Pueden usar el servidor SMTP de Gmail con su cuenta de Gmail, o lo más recomendable, Mailtrap, que a mi me gusta mucho:D!

Me gusta que Symfony tenga sus propias funciones para envío de emails.