Nuevo en Symfony 4.3: El componente Mime

Symfony incluye más de 60 componentes desacoplados para resolver las necesidades más habituales de las aplicaciones web y de consola. Las nuevas versiones de Symfony suelen añadir nuevos componentes y Symfony 4.3 no es una excepción. Este artículo presenta uno de ellos: el componente Mime.

Este componente permite crear y manipular mensaje MIME, que es lo que se utiliza al enviar emails. También incluye algunas utilidades relacionadas con "los tipos MIME". El estandar MIME completo (Multipurpose Internet Mail Extensions) es una serie de estándares que definen las funcionalidades añadidas con el paso del tiempo a los emails originales basados en texto (como la posibilidad de adjuntar archivos o formatear los contenidos con HTML).

El componente Mime abstrae toda esa complejidad para proporcionar dos formas de crear mensajes MIME. La primera es una API de alto nivel basada en la clase Symfony\Component\Mime\Email que permite crear emails de forma sencilla y cubre todas las necesidades comunes:

use Symfony\Component\Mime\Email;
 
$email = (new Email())
    ->from('[email protected]')
    ->to('[email protected]')
    ->subject('Important Notification')
    ->text('Lorem ipsum...')
    ->html('<h1>Lorem ipsum</h1> <p>...</p>')
;

La otra forma de crear los mensajes MIME es con una API de bajo nivel basada en la clase Symfony\Component\Mime\Message y que te da el control absoluto sobre todas y cada una de las partes del mensaje. El siguiente ejemplo es equivalente al anterior, pero utilizando la API de bajo nivel:

use Symfony\Component\Mime\Header\Headers;
use Symfony\Component\Mime\Message;
use Symfony\Component\Mime\Part\Multipart\AlternativePart;
use Symfony\Component\Mime\Part\TextPart;
 
$headers = (new Headers())
    ->addMailboxListHeader('From', ['[email protected]'])
    ->addMailboxListHeader('To', ['[email protected]'])
    ->addTextHeader('Subject', 'Important Notification')
;
 
$textContent = new TextPart('Lorem ipsum...');
$htmlContent = new TextPart('<h1>Lorem ipsum</h1> <p>...</p>', 'html');
$body = new AlternativePart($textContent, $htmlContent);
 
$email = new Message($headers, $body);

Además, el componente Mime ofrece muchas otras funcionalidades:

Integración con Twig

Una de las mejores funcionalidades del componente Mime es su integración total con Twig. La clase Symfony\Bridge\Twig\Mime\TemplatedEmail por ejemplo permite renderizar una plantilla Twig para generar los contenidos del email:

use Symfony\Bridge\Twig\Mime\TemplatedEmail;
 
$email = (new TemplatedEmail())
    ->from('[email protected]')
    ->to('[email protected]')
    // ...
 
    // pasa la ruta donde está la plantilla con los contenidos
    ->htmlTemplate('messages/user/signup.html.twig')
 
    // este método define los parámetros (nombre => valor) pasados a la plantilla
    ->context([
        'expiration_date' => new \DateTime('+7 days'),
        'username' => 'foo',
    ])
;

Cuando utilizas Twig, el componente Mime incluye todas estas funcionalidades:

El componente Mime te da absolutamente todo lo que necesitas para crear cualquier email que imagines ... pero no envía los emails. Del envío de los mensajes se encarga otro componente añadido a Symfony 4.3 llamado "Mailer" y del que hablaremos próximamente.

Esta funcionalidad fue contribuida por Fabien Potencier en el pull request #30416.

Fuente: New in Symfony 4.3: Mime component

Comentarios

Publicada el

19 de junio de 2019

Etiquetas

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.