me encontré con este post cuando estaba depurando un problema idéntico, y con base en mis investigaciones adicionales que puede proporcionar una explicación alternativa a Andreas:
El problema puede ser que el software de cliente de correo electrónico (Outlook 2003 , en mi caso) está decodificando incorrectamente la línea de asunto. En otras palabras, es un error en Outlook, no en .NET o su programa.
Si utiliza un valor tema como éste (la letra "c" repetida 256 veces), se muestra bien en Outlook:
subject = New String("c"c, 256)
Del mismo modo, si se utiliza un tema como éste (la letra "c "repetida 178 veces, con un carácter Unicode de no separación de espacio en anexo), también muestra como se esperaba en Outlook:
subject = New String("c"c, 178) + System.Text.Encoding.UTF8.GetChars(New Byte() {194, 160})
sin embargo, aparece el siguiente tema como "= UTF-8 B" basura -prepended?? en Outlook:
subject = New String("c"c, 179) + System.Text.Encoding.UTF8.GetChars(New Byte() {194, 160})
La diferencia es que esta tercera línea de asunto es de 256 bytes cuando está codificada en UTF-8. Supongo que Outlook debe truncar la línea de asunto a 255 caracteres antes de mostrarla ... lo cual estaría bien, excepto que está haciendo esto al truncar la cadena codificada a 255 bytes, lo que corta el terminador de codificación ("? =") , haciéndolo indecodificable
Esto es un error en Outlook y no en su proveedor de correo o .NET; puede ver la línea de asunto codificada UTF-8 completa y no truncada en Outlook haciendo clic derecho en el mensaje en su lista de mensajes y seleccionando "Opciones ..." en el menú contextual, luego desplácese hacia abajo en el cuadro "Encabezados de Internet" hasta ves la línea que comienza con "Asunto:".
Al contrario de lo que sugiere Andreas, el problema se manifiesta no solo cuando hay muchos caracteres que no son ASCII, sino cuando hay uno o más caracteres no ASCII y la línea de asunto es larga. Una solución podría ser utilizar una línea de asunto más corta o quitar todos los caracteres que no sean ASCII en el tema.
(Este error me resultó particularmente difícil de rastrear porque, como antes, los datos del problema no incluían caracteres no ASCII obvios, solo unos pocos espacios sin interrupción. Estos se muestran igual que los espacios ASCII normales cuando imprimirlos para la consola por otra parte, si se cambia el valor de la variable de cadena en el depurador de Visual Studio, en silencio los reemplaza con espacios regulares)
Así es como se ve un mensaje en bruto, pero cuando lo recibes en un cliente de correo electrónico es incorrecto. Recientemente descubrí que hay un error en .NET que hace que los sujetos codificados con codificación UTF-8 tengan una forma incorrecta. Ya archivé este error en Microsoft. Durante la investigación, encontré que algunos clientes de correo electrónico muestran una cadena básica de Base64 si está mal formada. Lamentablemente, no hay solución. Dotnet no permite codificar el tema manualmente; si lo hace, lo recodificará introduciendo nuevos errores. – Harry
@Harry: Creo que acabamos de tropezar con el mismo problema: ¿tiene un enlace a un error de conexión y/o una solución alternativa? –
La única solución alternativa que encontré para esto es no utilizar la codificación UTF-8 y elegir un idioma específico, como ISO o CP. Lo que descubrí fue claramente un error en .NET en sí mismo debido a una codificación de sujeto no válida. Sin embargo, no he verificado esto con las nuevas versiones de .NET. AFAIR estaba presente en .NET 4.5.0, no estoy seguro si lo probé con 4.5.1 y 4.5.2. – Harry