Blog


Sistema de alertas por correo electrónico para errores en Symfony

SISTEMA DE ALERTAS POR CORREO ELECTRÓNICO PARA ERRORES EN SYMFONY

20 / 04 / 2023 Symfony

Asegurarse de que una aplicación web desarrollada con Symfony está funcionando correctamente es una tarea importante para cualquier desarrollador. En este artículo práctico, vamos a ver cómo implementar un servicio de notificación por correo electrónico de errores.

Para comenzar, damos por hecho que ya tenemos una aplicación Symfony instalada y configurada. 

Paso 1: Instalar el paquete Mailer

El primer paso es instalar y configurar el paquete Mailer. Podemos hacerlo fácilmente utilizando Composer:

composer require symfony/mailer

Para enviar correos a través de SMTP, configuramos el DSN en el fichero .env

# .env
MAILER_DSN=smtp://user:pass@smtp.example.com:port
# config/packages/mailer.yaml
framework:
    mailer:
        dsn: '%env(MAILER_DSN)%'

Paso 3: Crear un controlador para generar errores

Para probar nuestro servicio de notificación de errores, podemos crear un controlador que genere un error. Podemos hacerlo creando una nueva ruta en nuestro archivo routes.yaml:

app_error:
    path: /error
    controller: App\Controller\DefaultController::error

Luego, creamos el controlador DefaultController y agregamos el siguiente método:

public function error()
{
    throw new \Exception('Esta es una excepción de prueba');
}

Este controlador simplemente genera una excepción para probar nuestro servicio de notificación de errores.

Paso 4: Configurar el manejador de excepciones

Symfony proporciona una forma fácil de capturar y manejar excepciones en nuestra aplicación. Podemos hacerlo utilizando el manejador de excepciones de Symfony. Para hacerlo, agregamos el siguiente código en nuestro archivo services.yaml:

services:
    App\EventListener\ExceptionListener:
        tags:
            - { name: kernel.event_listener, event: kernel.exception }

Este código agrega un nuevo EventListener llamado ExceptionListener que escucha el evento kernel.exception. Ahora, necesitamos crear la clase ExceptionListener y agregar el siguiente código:

<?php

namespace App\EventListener;

use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;

class ExceptionListener
{
    private $mailer;

    public function __construct(MailerInterface $mailer)
    {
        $this->mailer = $mailer;
    }

    public function onKernelException(ExceptionEvent $event)
    {
        // Obtiene la excepción
        $exception = $event->getThrowable();

        // Crea el correo electrónico
        $email = (new Email())
            ->from('tu_email@vabadus.es')
            ->to('tu_email_notificacion@vabadus.es')
            ->subject('Error en la aplicación')
            ->text('Se ha producido un error en la aplicación: ' . $exception->getMessage());

        // Envía el correo electrónico
        $this->mailer->send($email);
    }
}

Este código crea un objeto Email utilizando el paquete Mailer y envía un correo electrónico a la dirección de correo electrónico de notificación especificada en el método to(). El cuerpo del correo electrónico contiene el mensaje de error de la excepción que se ha producido.

Paso 5: Prueba el servicio de notificación de errores

Ahora, podemos probar nuestro servicio de notificación de errores visitando la ruta /error que creamos en el paso 3. Al hacerlo, se producirá una excepción y se enviará un correo electrónico de notificación al correo electrónico especificado en el método to() de la clase ExceptionListener.

 

 

 

 



ARTÍCULOS RELACIONADOS