2011-12-27 16 views
8

Usando el MailMessage class en .NET 4, encontré un problema hoy que no puedo resolver hasta ahora. Por favor, vea el siguiente código:Visualización errónea del receptor de correo electrónico al usar diéresis alemanas y una coma en el nombre

using (var message = new MailMessage()) 
{ 
    message.From = new MailAddress(@"[email protected]", "Uwe Keim"); 
    message.Bcc.Add(new MailAddress(@"[email protected]", "Uwe Keim")); 

    // This fails (see screenshot). 
    /*1*/ message.To.Add(new MailAddress(@"[email protected]", "Müller, Fred")); 

    // This succeeds. 
    /*2*/ message.To.Add(new MailAddress(@"[email protected]", "Fred Müller")); 

    // This also succeeds. 
    /*3*/ message.To.Add(new MailAddress(@"[email protected]", "Muller, Fred")); 

    message.Subject = "Test"; 
    message.Body = "Some text body."; 

    new SmtpClient().Send(message); 
} 

Este es un fragmento simple para enviar un mensaje SMTP. Mutuamente tratar las líneas /*1*/, /*2*/ y /*3*/, el comportamiento es diferente:

Cada vez que un receptor ("A") el nombre contiene una diéresis alemán (es decir, "a", "O" o "U") y una coma texto (es decir," '), el receptor ve dañado en el mensaje de correo electrónico que recibe:

enter image description here

Como se puede ver en la imagen anterior (tomado de Outlook 2010), hay una críptica' =? utf-8? Q? M = C3 = BCller "en la línea" A: ".

Salir de la coma o eliminar la umlaut alemana corrige esto. He probado tanto Exchange 2003 como hmailserver para obtener el mismo resultado.

Mi pregunta es:

Hay alguien consciente de este comportamiento y tiene una solución a ella?

Actualización 1:

Como se sugiere por el usuario Adam Maras, que puso en marcha Microsoft Network Monitor al enviar el mensaje de correo electrónico.

Para mí, parece que la clase MailMessage (o la clase SmtpClient?) Ya lo está haciendo mal:

cabeceras

enter image description here

+1

¿Puede volcar y mirar el mensaje de correo real, tal como se envía y como se recibe, para ambos formatos de nombre de visualización, para buscar diferencias? –

+1

@ AdamMras Para el receptor, ya lo hice y está_ mal. Para la parte de envío, ¿cómo podría hacer esto? Rastreo en el servidor de correo ¿qué se recibe de mi aplicación? –

+1

Eso, o usando algo como Fiddler para ver lo que la aplicación escribe en la conexión. –

Respuesta

4

Así que, después de algunas investigaciones, encontré el artículo de soporte de Microsoft 2576045: FIX: Email client does not support a name in a delivery address field that is encoded by the MailMessage class in the .NET Framework 4 if the name contains a non-ASCII character.

Parece que, al escribir una dirección que contiene caracteres Unicode, la clase MailMessage no codifica correctamente algo. Ciertamente, no puedo decirle qué se basa en la información del artículo de KB, pero sea lo que sea, es suficiente para que los lectores de abajo se ahoguen con los encabezados.

+1

Gracias, Adam, acabo de actualizar mi pregunta con los resultados de Microsoft Network Monitor. –

+1

Sí, esto parece en línea con lo que el artículo de KB (y todo lo que he leído sobre las experiencias de las personas con él), así que recomiendo probar la revisión. –

+1

Hotfix funcionó muy bien en mi cliente, probando ahora en el servidor. Muchas gracias, Adam! –

2

de correo electrónico tienen que ser US-ASCII (7 bits) , usando umlauts necesita codificación como se describe en rfc2047. Hay diferentes maneras de codificar las cadenas y se parece a Outlook o su servidor de correo no entenderá la codificación utf8.

Puede intentar codificar con mime la dirección usted mismo usando iso-8859-1.

edit: Acabo de comprobar la documentación en http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx

ha intentado utilizar MailAddress (String, String, Encoding)?

+1

Gracias, Bastian, desafortunadamente esto no ayudó. ¡Gracias por su pista, sin embargo! –

0

De hecho, tuvimos problemas similares. Principalmente con el sujeto sin embargo. Un paso en la dirección correcta fue MailMergeLib:

http://www.codeproject.com/KB/IP/MailMergeLib.aspx

que podrían darle una oportunidad, pero no resuelve todos nuestros problemas. Ahora cambiamos a Aspose.Email. Es mejor pero aún no es perfecto, todavía tenemos un tema etiquetado, pero ahora solo en Mac y iPhone, pero están trabajando en una corrección de errores.

http://www.aspose.com/categories/.net-components/aspose.email-for-.net/default.aspx

Puede probar de forma gratuita. Hay otras bibliotecas de correo electrónico en la red.
http://www.chilkatsoft.com/products.asp

Sería muy interesante si descubres algo más.

Cuestiones relacionadas