{"id":3190,"date":"2019-12-13T11:37:59","date_gmt":"2019-12-13T10:37:59","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=3190"},"modified":"2019-12-13T11:37:59","modified_gmt":"2019-12-13T10:37:59","slug":"fabricando-correos-con-swaks","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2019\/12\/13\/fabricando-correos-con-swaks\/","title":{"rendered":"Fabricando correos con swaks &#8230;"},"content":{"rendered":"\n<p>&#8230; para conseguir lo que me han pedido y que cuento en la <a href=\"https:\/\/esferas.org\/msqlu\/2019\/12\/13\/enviar-un-correo-desde-una-direccion-falsa\/\">entrada anterior<\/a>. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Y aqu\u00ed sigo, un rato despu\u00e9s, comprobando como se me cierran algunas puertas y tengo que abrir otras. <\/p>\n\n\n\n<p>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\u00e1 pasando con el cifrado en el programa Dovecot y que apunto para resolver m\u00e1s tarde, pero de resultas no puedo usar Thunderbird para lo que pretend\u00eda. En lo dem\u00e1s se comporta bien, te permite cambiar el remitente y casi no se nota. <\/p>\n\n\n\n<p>As\u00ed que empec\u00e9 a hacer pruebas con swaks y he visto que el formato b\u00e1sico para enviar correos con contenido propio es el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ swaks --server venexma.net -f noreply@venexma.es -t victor@venexma.es -a -tls --body body.txt --h-Subject \"Notificaci\u00f3n\"<\/code><\/pre>\n\n\n\n<p>Los mensajes llegan y se ven de la siguiente forma:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"497\" height=\"167\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2019\/12\/ksnip_20191213-071830.png\" alt=\"\" class=\"wp-image-3191\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2019\/12\/ksnip_20191213-071830.png 497w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2019\/12\/ksnip_20191213-071830-300x101.png 300w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/figure>\n\n\n\n<p>Y para crear el cuerpo del mensaje he empleado el programa <em>lorem<\/em> incluido en el m\u00f3dulo Perl <a href=\"https:\/\/metacpan.org\/release\/Text-Lorem\">Text::Lorem<\/a>. <\/p>\n\n\n\n<p>Pero tengo dos condiciones m\u00e1s: la primera es que el texto no sea en formato plano (muy vulgar en estos tiempos) y que se a\u00f1ada como destinatario oculto al gerente. Digo yo que para eso los podr\u00eda enviar directamente, \u00bf no ? Pues no. <\/p>\n\n\n\n<p>Para crear el mensaje en formato HTML necesitamos primero adaptarlo de la versi\u00f3n en formato Word que me han enviado y luego a\u00f1adir una cabecera al mensaje de texto <a href=\"https:\/\/serverfault.com\/questions\/846259\/how-to-send-a-mail-with-a-url-with-swaks#846269\">especificando el tipo MIME <\/a>del contenido. <\/p>\n\n\n\n<p>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. <\/p>\n\n\n\n<p>No es un invento que funcione tan bien porque estoy seguro de que me he saltado algunas cabeceras en el correo y quiz\u00e1s tambi\u00e9n en el texto. Los caracteres salen un poco mezclados entre UTF8 y cualquier otra cosa pero es un comienzo. <\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p class=\"has-small-font-size\">Pero antes de seguir un anuncio de inter\u00e9s p\u00fablico:<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"> \u00a1 Me han pedido que lo deje ! <\/p>\n\n\n\n<p class=\"has-small-font-size\">Con una explicaci\u00f3n breve, qu\u00e9 menos, pero que me ha chafado un poco el \u00e1nimo. \u00a1 Oiga, llevo varias horas con \u00e9sto y me estaba gustando !<\/p>\n\n\n\n<p class=\"has-small-font-size\">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 \u00e9l 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\u00edan hacer la prueba con unos pocos primeros antes de realizar un env\u00edo masivo. Tambi\u00e9n hab\u00edan cambiado un par de veces el contenido y duda va, duda viene, mejor decirle al inform\u00e1tico que muy bien, muy majo t\u00fa, pero d\u00e9jalo y ponte con otra cosa. <\/p>\n\n\n\n<p class=\"has-small-font-size\">Ah, y antes de eso no olvides documentarlo todo por si nos da el venazo y volvemos a ped\u00edrtelo de urgencia en un futuro pr\u00f3ximo.<\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p>Volviendo al tema me he dado cuenta de algunas cosas: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>swaks<\/em> es la leche y se puede considerar de verdad la navaja suiza del correo electr\u00f3nico. <\/li><li>Las cabeceras de un correo con contenido HTML son un poco m\u00e1s extensas y hay que ponerlas todas.<\/li><li>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.<\/li><li>No tengo la menor idea de por qu\u00e9 un mensaje enviado de esa forma no ha sido desechado inmediatamente a la carpeta de <em>spam<\/em>. Lo he probado con otras cuentas de gmail y nada. Debe ser que la IP fija del servidor interno tiene buena reputaci\u00f3n o que se est\u00e1n tomando en serio la disposici\u00f3n SPF que est\u00e1 correcta.<\/li><\/ul>\n\n\n\n<p>Una vez que he hecho la prueba de enviarme un correo con contenido similar usando Thunderbird he visto que deber\u00eda enviarlo yo as\u00ed tambi\u00e9n. El siguiente es un ejemplo de las cabeceras y de parte del cuerpo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Subject: =?UTF-8?Q?Notificaci=c3=b3n?=\nMIME-Version: 1.0\nContent-Type: text\/html; charset=\"UTF-8\"\nContent-Language: es-ES\nContent-Transfer-Encoding: quoted-printable\n...\n&lt;html>\n  &lt;head>\n\n    &lt;meta http-equiv=3D\"content-type\" content=3D\"text\/html; charset=3DUTF-8=\n\">\n  &lt;\/head>\n  &lt;body>\n    &lt;p>Esta es una notificaci=C3=B3n con caracteres acentuados: =C3=A1=C3=\n=A9=C3=AD=C3=B3=C3=BA.&lt;\/p>\n    &lt;p>Veamos qu=C3=A9 tal.&lt;\/p>\n    &lt;p>&lt;br>\n    &lt;\/p>\n  &lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p>As\u00ed que para resumir anoto aqu\u00ed la composici\u00f3n de par\u00e1metros de swaks para enviar el mensaje:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ 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\"<\/code><\/pre>\n\n\n\n<p>Y el contenido de body.txt debe adaptarse a la codificaci\u00f3n indicada. El problema aqu\u00ed es que he terminado convirtiendo tantos formatos que es casi mejor empezar de cero para obtener un c\u00f3digo HTML majete que sea vistoso y no intrusivo.<\/p>\n\n\n\n<p>Sigo con ello &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; para conseguir lo que me han pedido y que cuento en la entrada anterior.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[14],"tags":[25,52,920],"class_list":["post-3190","post","type-post","status-publish","format-standard","hentry","category-internet","tag-email","tag-mi-lugar-de-trabajo","tag-swaks"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=3190"}],"version-history":[{"count":8,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3190\/revisions"}],"predecessor-version":[{"id":3202,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/3190\/revisions\/3202"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=3190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=3190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=3190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}