viernes, 11 de abril de 2008

colocar acentos en el subject de un mail

Tuve que desarrollar un programa que enviaba mail a distintas personas, pero me encontre con varios problemas de encoding. el principal fue el problema al colocar acentos en el subject del mail.

para sorpresa mia encontre en un pagina que hay que codificar el subject para que tome caracteres especiales como acentos y ennes(tengo el teclado en ingles).

este programa lo estaba haciendo en c#. y para que muestre acentos hay que codificarlo en base64 de la siguiente forma:


subject = "=?ISO-8859-1?B?" + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(texto))+"=?=";


ademas de codificar el string, tenemos que pasar esto "=?ISO-8859-1?B?" al inicio inicio del string, para que el que
despliga el correo sepa que el asunto esta codificado indicandole la codificacion en que se codifico.


Nota: en php tambien hay funciones para manejar la codificacion en base 64



4 comentarios:

  1. Puedo estar hablando leseras (hace tiempo que no meto mano en .NET), pero eso arregla los acentos, pero no otros caracteres que pueden estar fuera de ISO8859-1, como el del símbolo del euro (€).

    Al final lo más cuerdo es que las aplicaciones "hablen" UTF-8, que aguanta caracteres de todos lados, pero no tengo idea como se haría en .NET.

    Acá hay un post (algo viejo) de como se hace en Python.

    ResponderEliminar
  2. aqui hay 2 ejemplos como codificar en utf-8 en .net

    http://codelog.climens.net/2007/07/17/escribir-texto-con-aspnet/
    http://www.codeproject.com/KB/aspnet/Encoding_in_ASPNET.aspx

    con esto de las codificaciones siempre me he confundido. jejeje :)

    ResponderEliminar
  3. Gracias Víctor Hugo, estuve renegando algunos días con esto de los acentos en el asunto y con tu post pude solucionarlo.

    Muchas gracias!
    Aníbal.

    ResponderEliminar
  4. Buena capo! puf! me ahorraste un montón! ví el los mensaje en formato raw de gmail pero no lo entendía, con tu código funciono joya. Y también muestra el símbolo del euro. Lo codifique así base64.b64encode("texto") ...normal Gracias!

    ResponderEliminar