Ich kam in diesem Beitrag, wenn ich ein identisches Problem wurde Debuggen, und basierte auf meinen weiteren Untersuchungen ich Andreas eine alternative Erklärung liefern:
Das Problem, dass Ihre E-Mail-Client-Software sein kann (Outlook 2003 , in meinem Fall) ist die Betreffzeile falsch dekodieren. Mit anderen Worten, es ist ein Fehler in Outlook, nicht in .NET oder Ihrem Programm.
Wenn Sie einen Betreff Wert wie folgt (der Buchstabe „c“ 256-mal wiederholt) verwenden, zeigt es in Outlook fein:
subject = New String("c"c, 256)
Ebenso, wenn Sie ein Thema wie diesen (den Buchstaben „c "178-mal wiederholt, mit einer Unicode non-breaking Raumzeichen angehängt), es zeigt auch, wie in Outlook erwartet:
subject = New String("c"c, 178) + System.Text.Encoding.UTF8.GetChars(New Byte() {194, 160})
jedoch die folgenden Themen Displays als "= UTF-8-B" garbage -prepended? in Outlook:
subject = New String("c"c, 179) + System.Text.Encoding.UTF8.GetChars(New Byte() {194, 160})
Der Unterschied ist, dass diese dritte Betreffzeile 256 Bytes bei UTF-8-Codierung ist. Ich gehe davon aus, dass Outlook die Betreffzeile auf 255 Zeichen abschneiden muss, bevor sie angezeigt wird ... was gut wäre, außer dass es die codierte Zeichenfolge auf 255 Byte abschneidet, wodurch der Codierungsabschluss ("? =") Abgeschnitten wird. und macht es nicht entzifferbar.
Dies ist ein Fehler in Outlook und nicht Ihr Mail-Provider oder .NET; Sie können die vollständige, nicht abgeschnittene UTF-8-codierte Betreffzeile in Outlook sehen, indem Sie mit der rechten Maustaste auf die Nachricht in Ihrer Nachrichtenliste klicken und "Optionen ..." im Kontextmenü auswählen und dann im Feld "Internet-Header" nach unten scrollen Sie sehen die Zeile, die mit "Betreff:" beginnt.
Im Gegensatz zu der Situation, die Andreas vorschlägt, manifestiert sich das Problem nicht nur bei vielen Nicht-ASCII-Zeichen, sondern auch bei einem oder mehreren Nicht-ASCII-Zeichen, und die Betreffzeile ist lang. Eine Problemumgehung könnte sein, eine kürzere Betreffzeile zu verwenden oder alle Nicht-ASCII-Zeichen in Ihrem Betreff auszublenden.
(Dieser Fehler war besonders schwierig für mich zu finden, weil, wie oben, die Problemdaten keine offensichtlichen Nicht-ASCII-Zeichen enthalten - nur ein paar nicht-brechende Leerzeichen. Diese zeigen die gleichen wie normale ASCII-Leerzeichen drucken Sie sie an die Konsole aus Außerdem, wenn Sie den Wert des String-Variable in den Visual Studio-Debugger zu ändern, es ersetzt sie leise mit regelmäßigen Leerzeichen)
So sieht eine rohe Nachricht aus, aber wenn Sie sie in einem E-Mail-Client erhalten, ist sie falsch. Ich habe kürzlich herausgefunden, dass es einen Fehler in .NET gibt, der Themen, die mit UTF-8 codiert sind, falsch formatiert. Ich habe diesen Fehler bereits bei Microsoft eingereicht. Während der Recherche habe ich festgestellt, dass einige E-Mail-Clients eine rohe Base64-Zeichenfolge anzeigen, wenn sie fehlerhaft ist. Leider gibt es keine Problemumgehung. Dotnet erlaubt es nicht, das Thema manuell zu codieren, wenn Sie es tun, wird es es neu codieren und neue Fehler einführen. – Harry
@Harry: Ich denke, wir haben gerade über das gleiche Problem gestolpert - haben Sie einen Link zu einem Connect-Bug und/oder einen Workaround? –
Die einzige Problemumgehung, die ich dafür gefunden habe, ist nicht UTF-8-Kodierung zu verwenden und sprachspezifische zu wählen, wie ISO oder CP. Was ich herausgefunden habe, war eindeutig ein Fehler in .NET selbst aufgrund der ungültigen Subjektcodierung. Ich habe dies jedoch nicht mit neuen .NET-Versionen überprüft. AFAIR es war in .NET 4.5.0 vorhanden, nicht sicher, ob ich es mit 4.5.1 und 4.5.2 getestet habe. – Harry