Estilo de correo electrónico real con Inky y Foundation CSS
Para que este correo electrónico tenga un aspecto realmente elegante, tenemos que mejorar el HTML y el CSS.
Empecemos por el CSS. Con el CSS estándar de un sitio web, es probable que hayas utilizado un framework CSS como Tailwind (que utiliza nuestra aplicación), Bootstrap o Foundation. ¿Existe algo así para los correos electrónicos? Sí Y es aún más importante utilizar uno para los correos electrónicos porque hay muchos clientes de correo electrónico que los renderizan de forma diferente.
CSS de Foundation para correos electrónicos
Para los correos electrónicos, recomendamos utilizar Foundation, ya que tiene un marco específico para correos electrónicos. Busca en Google "Foundation CSS" y encontrarás esta página.
Descarga el kit de inicio para la "Versión CSS". Este archivo zip incluye un archivo foundation-emails.css que es el "framework" real.
Ya lo he incluido en el directorio tutorials/. Cópialo enassets/styles/.
En nuestro booking_confirmation.html.twig, el filtro inline_css puede tomar varios argumentos. Haz que el primer argumento sea source('@styles/foundation-emails.css')y utiliza email.css para el segundo argumento:
| {% apply inline_css(source('@styles/foundation-emails.css'), source('@styles/email.css')) %} | |
| // ... lines 2 - 24 |
Esto contendrá estilos personalizados y anulaciones.
Abriré email.css y pegaré algo de CSS personalizado para nuestro correo electrónico:
| .trip-name { | |
| font-size: 32px; | |
| } | |
| .accent-title { | |
| color: #666666; | |
| } | |
| .trip-image { | |
| border-radius: 12px; | |
| } |
¡Tablas!
Ahora tenemos que mejorar nuestro HTML. Pero ¡qué noticia más rara! La mayoría de las cosas que utilizamos para dar estilo a los sitios web no funcionan en los correos electrónicos. Por ejemplo, no podemos utilizar Flexbox ni Grid. En su lugar, tenemos que utilizar tablas para la maquetación. ¡Tablas! Tablas, dentro de tablas, dentro de tablas. ¡Qué asco!
Lenguaje de plantillas Inky
Por suerte, hay un lenguaje de plantillas que podemos utilizar para hacer esto más fácil. Busca "inky templating language" para encontrar esta página. Inky está desarrollado por la Fundación Zurb. Zurb, Inky, Foundation... ¡estos nombres encajan perfectamente con nuestro tema espacial! ¡Y todos funcionan juntos!
Puedes hacerte una idea de cómo funciona en la vista general. Este es el HTML necesario para un simple correo electrónico. ¡Es un infierno de tabla! Haz clic en la pestaña "Cambiar a Inky". ¡Guau! ¡Esto es mucho más limpio! Escribimos en un formato más legible e Inky lo convierte en la tabla-horror necesaria para los correos electrónicos.
Incluso hay "componentes Inky": botones, llamadas, cuadrículas, etc.
En tu terminal, instala un filtro Twig de Inky que convertirá nuestro marcado Inky en HTML.
composer require twig/inky-extra
inky_to_html Filtro Twig
En booking_confirmation.html.twig, añade el filtro inky_to_htmla apply, canalizando inline_css a continuación:
| {% apply inky_to_html|inline_css(source('@styles/foundation-emails.css'), source('@styles/email.css')) %} | |
| // ... lines 2 - 24 |
En primer lugar, aplicamos el filtro Inky y, a continuación, alineamos el CSS.
Copiaré algunas marcas Inky para nuestro correo electrónico.
| {% apply inky_to_html|inline_css(source('@styles/foundation-emails.css'), source('@styles/email.css')) %} | |
| <container> | |
| <row> | |
| <columns> | |
| <spacer size="40"></spacer> | |
| <p class="accent-title">Get Ready for your trip to</p> | |
| <h1 class="trip-name">{{ trip.name }}</h1> | |
| </columns> | |
| </row> | |
| <row> | |
| <columns> | |
| <p class="accent-title">Departure: {{ booking.date|date('Y-m-d') }}</p> | |
| </columns> | |
| </row> | |
| <row> | |
| <columns> | |
| <button class="expanded rounded center" href="{{ url('booking_show', {uid: booking.uid}) }}"> | |
| Manage Booking | |
| </button> | |
| <button class="expanded rounded center secondary" href="{{ url('bookings', {uid: customer.uid}) }}"> | |
| My Account | |
| </button> | |
| </columns> | |
| </row> | |
| <row> | |
| <columns> | |
| <p>We can't wait to see you there,</p> | |
| <p>Your friends at Universal Travel</p> | |
| </columns> | |
| </row> | |
| </container> | |
| {% endapply %} |
Tenemos un <container>, con <rows> y<columns>. Este será un correo electrónico de una sola columna, pero puedes tener tantas columnas como necesites. Este <spacer> añade espacio vertical para respirar.
¡Veamos este correo electrónico en acción! Reserva un nuevo viaje para Steve, ¡ups, debe ser una fecha en el futuro, y reserva!
Comprueba Mailtrap y encuentra el correo electrónico. ¡Vaya! ¡Esto tiene mucho mejor aspecto! Podemos utilizar este pequeño widget que Mailtrap proporciona para ver cómo se verá en móviles y tabletas.
Mirando el "HTML Check", parece que tenemos algunos problemas, pero, creo que mientras estemos usando Foundation e Inky como es debido, deberíamos estar bien.
Comprueba los botones. "Gestionar reserva", sí, funciona. "Mi cuenta", sí, también funciona. ¡Eso ha sido un éxito rápido gracias a Foundation e Inky!
A continuación, vamos a mejorar aún más nuestro correo electrónico incrustando la imagen del viaje y haciendo felices a los abogados añadiendo un archivo adjunto en PDF con las "condiciones del servicio".
10 Comments
En php.ini extension=xls is enabled but the error still appears
Hey @giorgiocba ,
That's great! First of all, please make sure that the
extension=xlsline does not start#, otherwise that's commented out and you need to uncomment it first. Also, make sure the php.ini file is correct, probably you're in the wrong file? You can check if the extension is enabled by runningphp -m | grep xlsin your terminal. If you don't see it printsxls- then most probably you're in the wrong file. You can watch the path to thephp.inifile in the output ofphp --inicommand.Please, also make sure you don't have a few versions of PHP installed in your system, otherwise a different version might be used that reads a different config file.
Also, how do you run the website? Do you use
symfony servecommand as recommended? Please, try to restart the Symfony built in server after any changes in thephp.inifile and try again.I hope that helps!
Cheers!
Victor: Thank you so much for all your help. Your explanations are very clear and concise.
Hey @giorgiocba ,
You're welcome, I hope that helped! And feel free to ask questions if you have any issues following our tutorials.
Cheers!
Third problem
After installing inky another error appears:
An exception has been thrown during the rendering of a template ("Undefined constant "XSL_SECPREF_READ_FILE"").
Hey @giorgiocba ,
Yeah, that's most probably because you installed
twig/inky-extrawith--ignore-platform-req=ext-xsl. You need to have thatxslPHP extension installed and enabled in your PHP to use the bundle without issues.Cheers!
Other problem:
When I install: composer require twig/inky-extra
This not work, It is better suggested: composer require twig/inky-extra --ignore-platform-req=ext-xsl
Hey @giorgiocba ,
Yes, that
twig/inky-extrapackage requires you to havexslPHP extension. You have to install it to avoid problems with that bundle.Cheers!
Hi,
When write: {% apply inline_css(source('@styles/foundation-emails.css'), source('@styles/email.css')) %}
The are an error: There are no registered paths for namespace "styles".
Hey @giorgiocba ,
We registered that
stylespath in the previous chapter, see: https://symfonycasts.com/screencast/mailtrap/css-email#twig-styles-namespacePlease, make sure you did the same in your project. If you did, probably try to clear the cache and try again.
Cheers!
"Houston: no signs of life"
Start the conversation!