2011-12-27 8 views
8

Po zainstalowaniu MailMessage class w .NET 4, znalazłem problem, którego nie udało mi się rozwiązać do tej pory. Zapoznaj się z następującym kodem:Błędny ekran odbiornika wiadomości e-mail z niemieckimi przegłosami i przecinkiem o nazwie

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); 
} 

To jest prosty fragment, więc wyślij wiadomość SMTP. Wzajemnie próbują linie /*1*/, /*2*/ i /*3*/ zachowanie różni:

Kiedy odbiornik („Do”) Nazwa zawiera niemiecki umlaut (czyli „a”, „o” lub „U”) i przecinek (tj”,«), odbiornik widzi uszkodzony tekst w wiadomości e-mail otrzymuje:

enter image description here

Jak widać na powyższym zrzucie ekranu (wzięte z programu Outlook 2010), istnieje tajemnicze» =? utf-8? Q? M = C3 = BCller "w linii" Do: ".

Usunięcie tego przecinka lub usunięcie niemieckiej umlaut. Próbowałem zarówno Exchange 2003 i hmailserver, aby uzyskać ten sam wynik.

Moje pytanie brzmi:

Czy ktoś świadomi tego problemu i ma rozwiązanie to?

Aktualizacja 1:

Jak sugeruje użytkownikowi Adam Maras, Zwolniłem się Microsoft Network Monitor podczas wysyłania wiadomości e-mail.

Dla mnie wydaje się, że klasa MailMessage (lub klasa SmtpClient?) Już robi to źle:

nagłówki

enter image description here

+1

Czy możesz rzucić i sprawdzić faktyczną wiadomość e-mail, jako wysyłaną i odebraną, dla obu formatów wyświetlanych, aby wyszukać różnice? –

+1

@AdamMaras Dla odbiorcy już to zrobiłem i jest źle. W przypadku części wysyłającej: Jak mogę to zrobić? Śledzenie na serwerze pocztowym, co otrzymuje z mojej aplikacji? –

+1

To, lub używając czegoś takiego jak Skrzypek, aby zobaczyć, co aplikacja pisze do połączenia. –

Odpowiedz

4

Po kilku kopiach natrafiłem na artykuł pomocy technicznej firmy 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.

Wygląda na to, że podczas wpisywania adresu zawierającego znaki Unicode, klasa MailMessage nieprawidłowo koduje coś. Na pewno nie mogę ci powiedzieć, co to jest oparte na informacjach z artykułu w bazie KB, ale cokolwiek to jest, wystarczy, aby czytelnicy na dole dusili się w nagłówkach.

+1

Dzięki, Adam, właśnie zaktualizowałem moje pytanie z wynikami z Microsoft Network Monitor. –

+1

Tak, wydaje się to zgodne z tym, co artykuł KB (i wszystko, co czytałem na temat doświadczeń ludzi z nim), więc polecam wypróbowanie poprawki. –

+1

Poprawka działała świetnie na moim kliencie, próbując teraz na serwerze. Wielkie dzięki, Adam! –

2

E-mail musi być US-ASCII (7-bit) , użycie umlautów wymaga kodowania, jak opisano w rfc2047. Istnieją różne sposoby kodowania ciągów i wygląda na to, że twój serwer pocztowy nie zrozumie kodowania utf8.

Możesz spróbować kodować adres samodzielnie za pomocą iso-8859-1.

Edit: Właśnie sprawdziłem dokumentację w http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx

próbowałeś za pomocą MailAddress (String, String, kodowanie)?

+1

Dzięki, Bastian, niestety to nie pomogło. Dzięki za twoją podpowiedź! –

0

Rzeczywiście mieliśmy podobne problemy. Głównie z Tematem. Jeden krok w dobrym kierunku było MailMergeLib:

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

Mogłeś dać to spróbować, ale to nie rozwiąże wszystkich naszych problemów. Teraz przełączyliśmy się na Aspose.Email. Jest jeszcze lepsza, ale wciąż nie jest doskonała, wciąż mamy temat z granatami, ale teraz tylko na Macach i iPhone'ach, ale pracują nad poprawką.

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

Można spróbować go za darmo. Istnieją inne biblioteki e-mail w sieci.

Byłby bardzo zainteresowany, gdybyś odkrył coś więcej.