miércoles, 15 de abril de 2009

Impedir que el Exim cambie la codificación del Asunto

Bueno, les cuento lo descubierto...

El proceso que ocurría era el siguiente:

* El emisor mandaba un mensaje de correo con el asunto puesto en codificación utf8

Por ejemplo: el emisor escribe esto:

Subject: Prueba de acentos: áéíóúñÑ

y su programa de correo lo transforma en:

Subject: Prueba de acentos: =?UTF-8?B?w6HDqcOtw7PDusOxw5E=?=

que es una forma de transmitir caracteres "extraños para los anglosajones". Fijaros que pone UTF-8 en medio, para indicar que lo que sigue es una codificación especial.

* Al llegar el correo a nuestro servidor de correo, nuestro programa gestor de correo QUITABA la codificación de los caracteres acentuados que había en el asunto, PORQUE está contemplado en el protocolo estándar de correo: en las cabeceras se permite poner los acentos de forma directa, sin codificación ninguna.

Por ello, nuestro programa de correo, al recibir:

Subject: Prueba de acentos: =?UTF-8?B?w6HDqcOtw7PDusOxw5E=?=

Lo dejaba así:

Subject: Prueba de acentos: áéíóúñÑ

y se esperaba que el programa de correo entendiese esos acentos, PORQUE en el resto del mensaje, sí que está indicada la codificación:

Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

y por esa razón se ve perfectamente en los programas de correo más modernos.

El problema está ahí: no todo el mundo usa un programa de correo moderno, como es el caso de los Microsoft Outlook. En esos programas, al encontrarse con el asunto

Subject: Prueba de acentos: áéíóúñÑ

lo saca tal cual en pantalla (lo cual es lógico), PERO resulta que el usuario, seguramente, NO ESTÁ TRABAJANDO con la misma codificación que los caracteres mostrados. La consecuencia es que el usuario ve

Subject: Prueba de acentos: áéíóúñÃ

Esos caracteres extraños, juntos, siguen siendo los mismos acentos de antes. Lo que varía es la forma en que el usuario los ve.


Este problema es derivado de que cada ordenador trabaja con una codificación distinta.

La tendencia tecnológica actual es usar SIEMPRE la codificación UTF-8, tanto a la hora de crear como de leer documentos/correos.

Pero, mientras tanto, los programas antiguos nos darán estos dolores de cabeza.

La solución fue editar exim4.conf y donde pone $h_subject, cambiarlo por $bh_subject, según lo indicado en http://www.exim.org/exim-html-current/doc/html/spec_html/ch11.html#SECTexpansionitems

Actualización: Por alguna extraña razón, algunos clientes emiten un retorno de carro y/o avance de línea después del Subject. Cambio la opción de $rh_subject a $bh_subject.