Recientemente implementé correos electrónicos entrantes para una aplicación y chico, ¿abrí las puertas del infierno? Desde entonces, cada dos días llega un correo electrónico que hace que la aplicación falle de una manera diferente.
Una de esas cosas son los correos electrónicos codificados como UTF-7. La mayoría de los correos electrónicos vienen como ASCII, algunas de las codificaciones latinas, o afortunadamente, UTF-8.
Los mensajes de error de Hotmail (como la dirección de correo electrónico no existe o se excede la cuota) parecen venir como UTF-7. Desafortunadamente, UTF-7 no es una codificación que Ruby entiende:
> "hello world".encode("utf-8", "utf-7")
Encoding::ConverterNotFoundError: code converter not found (UTF-7 to UTF-8)
> Encoding::UTF_7
=> #<Encoding:UTF-7 (dummy)>
Mi aplicación no se bloquea, en realidad maneja el correo electrónico bastante bien, pero me envía una notificación sobre el posible error.
Pasé un tiempo buscando en Google y no puedo encontrar a nadie que haya implementado la conversión, al menos no como Ruby 1.9.3 Encoding :: Converter.
Entonces, mi pregunta es, dado que nunca recibí un correo electrónico con contenido real, de una persona real, en UTF-7, ¿qué tan relevante es esa codificación? ¿Puedo ignorarlo con seguridad?
Respuestas:
La única característica relevante de UTF-7 (sobre UTF-8, por ejemplo) es que es una codificación de 7 bits, al igual que el viejo ASCII. Eso significa que funciona sobre un sistema que no está limpio de 8 bits .
El único sistema a gran escala en el que esto es importante hoy en día son los servidores de correo (no me pregunten por qué no solucionaron este problema hace 10-20 años, la mayoría de los servidores sí, pero algunos aparentemente todavía no lo hicieron).
Entonces: UTF-7 solo tendrá relevancia en los sistemas de correo electrónico. En cualquier otro lugar, UTF-8 es la mejor opción.
fuente
Gracias al comentario de Charles Salvia, encontré un método en el módulo IMAP que ayudó:
fuente