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:
- Puedes definir las direcciones de email mediante cadenas de texto y objetos, con o sin nombre, etc.
- Soporta la posibilidad de embeber imágenes, que es muy útil al crear mensajes HTML complejos.
- También soporta los archivos adjuntos usando tanto archivos físicos como recursos/streams PHP.
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:
- Inclusión más sencilla de imágenes.
- Creación automática de estilos CSS inline, que es necesario porque algunos
clientes de email muy populares no soportan estilos CSS definidos dentro de
secciones
<style> ... </style>
. - Renderizado de contenidos Markdown si quieres definir el contenido de tus emails con este popular formato.
- Soporte del lenguaje de plantillas Inky, que es uno de los más populares para crear mensajes HTML con diseño responsive.
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
Proyectos Symfony destacados
La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.