Fabricando correos con swaks …

… para conseguir lo que me han pedido y que cuento en la entrada anterior.

Y aquí sigo, un rato después, comprobando como se me cierran algunas puertas y tengo que abrir otras.

El programa de correo que empleo es Thunderbird. No es complicado indicar que una cuenta utilice un servidor SMTP concreto salvo que tengas problemas para crear la cuenta y no puedas ni leer ni enviar ni nada. Es algo que está pasando con el cifrado en el programa Dovecot y que apunto para resolver más tarde, pero de resultas no puedo usar Thunderbird para lo que pretendía. En lo demás se comporta bien, te permite cambiar el remitente y casi no se nota.

Así que empecé a hacer pruebas con swaks y he visto que el formato básico para enviar correos con contenido propio es el siguiente:

$ swaks --server venexma.net -f noreply@venexma.es -t victor@venexma.es -a -tls --body body.txt --h-Subject "Notificación"

Los mensajes llegan y se ven de la siguiente forma:

Y para crear el cuerpo del mensaje he empleado el programa lorem incluido en el módulo Perl Text::Lorem.

Pero tengo dos condiciones más: la primera es que el texto no sea en formato plano (muy vulgar en estos tiempos) y que se añada como destinatario oculto al gerente. Digo yo que para eso los podría enviar directamente, ¿ no ? Pues no.

Para crear el mensaje en formato HTML necesitamos primero adaptarlo de la versión en formato Word que me han enviado y luego añadir una cabecera al mensaje de texto especificando el tipo MIME del contenido.

Libreoffice, una vez abierto el documento, nos permite exportarlo a un formato HTML autocontenido dado que no incluye referencias externas, aunque conserva los meta datos del escrito.

No es un invento que funcione tan bien porque estoy seguro de que me he saltado algunas cabeceras en el correo y quizás también en el texto. Los caracteres salen un poco mezclados entre UTF8 y cualquier otra cosa pero es un comienzo.


Pero antes de seguir un anuncio de interés público:

¡ Me han pedido que lo deje !

Con una explicación breve, qué menos, pero que me ha chafado un poco el ánimo. ¡ Oiga, llevo varias horas con ésto y me estaba gustando !

El caso es que el mensaje que iban a enviar no es tan inocente como yo pensaba. La lista de destinatarios es corta porque al parecer en él se plantea un cambio de condiciones de venta que puede que no guste a determinados clientes tan viejos como la empresa. Tanto puede llegar a molestar que querían hacer la prueba con unos pocos primeros antes de realizar un envío masivo. También habían cambiado un par de veces el contenido y duda va, duda viene, mejor decirle al informático que muy bien, muy majo tú, pero déjalo y ponte con otra cosa.

Ah, y antes de eso no olvides documentarlo todo por si nos da el venazo y volvemos a pedírtelo de urgencia en un futuro próximo.


Volviendo al tema me he dado cuenta de algunas cosas:

  • swaks es la leche y se puede considerar de verdad la navaja suiza del correo electrónico.
  • Las cabeceras de un correo con contenido HTML son un poco más extensas y hay que ponerlas todas.
  • El contenido puro en HTML debe ir codificado de manera especial, como hacen los programas de escritorio sin preguntar, porque le estamos inyectando el texto directamente al servidor de correo.
  • No tengo la menor idea de por qué un mensaje enviado de esa forma no ha sido desechado inmediatamente a la carpeta de spam. Lo he probado con otras cuentas de gmail y nada. Debe ser que la IP fija del servidor interno tiene buena reputación o que se están tomando en serio la disposición SPF que está correcta.

Una vez que he hecho la prueba de enviarme un correo con contenido similar usando Thunderbird he visto que debería enviarlo yo así también. El siguiente es un ejemplo de las cabeceras y de parte del cuerpo.

Subject: =?UTF-8?Q?Notificaci=c3=b3n?=
MIME-Version: 1.0
Content-Type: text/html; charset="UTF-8"
Content-Language: es-ES
Content-Transfer-Encoding: quoted-printable
...
<html>
  <head>

    <meta http-equiv=3D"content-type" content=3D"text/html; charset=3DUTF-8=
">
  </head>
  <body>
    <p>Esta es una notificaci=C3=B3n con caracteres acentuados: =C3=A1=C3=
=A9=C3=AD=C3=B3=C3=BA.</p>
    <p>Veamos qu=C3=A9 tal.</p>
    <p><br>
    </p>
  </body>
</html>

Así que para resumir anoto aquí la composición de parámetros de swaks para enviar el mensaje:

$ swaks --server venexma.net -f noreply@venexma.es -t victor@venexma.es -a -tls --body body.html --h-Subject "=?UTF-8?Q?Notificaci=c3=b3n?=" --add-header "MIME-Version: 1.0" --add-header "Content-Type: text/html charset=UTF-8" --add-header "Content-Transfer-Encoding: quoted-printable"

Y el contenido de body.txt debe adaptarse a la codificación indicada. El problema aquí es que he terminado convirtiendo tantos formatos que es casi mejor empezar de cero para obtener un código HTML majete que sea vistoso y no intrusivo.

Sigo con ello …