2011-12-27 28 views
8

Sử dụng MailMessage class trong .NET 4, tôi đã phát hiện sự cố hôm nay mà tôi không thể giải quyết cho đến thời điểm này. Vui lòng xem mã sau:Hiển thị bộ nhận email không đúng khi sử dụng dấu âm tiếng Đức và dấu phẩy trong tên

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

Đây là đoạn mã đơn giản để gửi tin nhắn SMTP. Đôi bên cùng cố gắng các dòng /*1*/, /*2*//*3*/, hành vi khác:

Bất cứ khi nào một máy thu ("To") tên chứa một âm sắc Đức (tức là "A", "O" hoặc chữ "U") dấu phẩy văn bản (ví dụ", '), người nhận xem sự hư hỏng trong email anh nhận:

enter image description here

Như bạn thấy trong hình trên (lấy từ Outlook 2010), có một bí ẩn' =? utf-8? Q? M = C3 = BCller "trong dòng" Tới: ".

Rời khỏi dấu phẩy hoặc xóa các sửa lỗi tiếng Đức này. Tôi đã thử cả Exchange 2003 và hmailserver để có được kết quả tương tự.

Câu hỏi của tôi là:

Có ai biết về hành vi này và có một giải pháp cho nó?

Cập nhật 1:

Theo đề nghị của người sử dụng Adam Maras, tôi bị sa thải lên Microsoft Network Monitor khi gửi tin nhắn email.

Đối với tôi, dường như lớp MailMessage (hoặc lớp SmtpClient?) Đã làm việc đó sai:

tiêu đề

enter image description here

+1

Bạn có thể đổ và xem thông báo thư thực sự, vì thư được gửi và nhận được, cho cả hai định dạng tên hiển thị, để tìm sự khác biệt? –

+1

@AdamMaras Đối với người nhận, tôi đã làm và nó _is_ sai. Đối với phần gửi, Làm thế nào tôi có thể làm điều này? Truy tìm trong máy chủ thư những gì nhận được từ ứng dụng của tôi? –

+1

Điều đó, hoặc sử dụng một cái gì đó như Fiddler để xem những gì ứng dụng ghi vào kết nối. –

Trả lời

4

Vì vậy, sau một số lần đào, tôi đã xem qua bài viết Hỗ trợ của 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.

Dường như khi viết một địa chỉ có chứa các ký tự Unicode, lớp MailMessage không mã hóa chính xác thứ gì đó. Tôi chắc chắn không thể cho bạn biết những gì nó được dựa trên thông tin của bài viết KB, nhưng bất cứ điều gì nó là, nó đủ để làm cho độc giả hạ lưu nghẹt thở trên các tiêu đề.

+1

Cảm ơn, Adam, tôi vừa cập nhật câu hỏi của mình với kết quả từ Microsoft Network Monitor. –

+1

Vâng, điều này có vẻ phù hợp với những gì bài viết KB (và tất cả mọi thứ tôi đã đọc về kinh nghiệm của người dân với nó) vì vậy tôi khuyên bạn nên thử các hotfix. –

+1

Hotfix hoạt động tốt trên máy khách của tôi, hiện đang thử trên máy chủ. Cảm ơn rất nhiều, Adam! –

2

E-mail phải us-ascii (7-bit) , bằng cách sử dụng umlauts cần mã hóa như discribed trong rfc2047. Có nhiều cách khác nhau để mã hóa các chuỗi và có vẻ như triển vọng hoặc máy chủ thư của bạn sẽ không hiểu mã hóa utf8.

Bạn có thể cố gắng tự giải mã địa chỉ bằng iso-8859-1.

chỉnh sửa: Tôi chỉ kiểm tra các tài liệu tại http://msdn.microsoft.com/en-us/library/system.net.mail.mailaddress.aspx

bạn đã cố gắng sử dụng MailAddress (String, String, Encoding)?

+1

Cảm ơn, Bastian, thật không may điều này đã không giúp đỡ. Cảm ơn gợi ý của bạn, mặc dù! –

0

Chúng tôi thực sự có vấn đề tương tự. Chủ yếu là với các chủ đề mặc dù. Một bước đi đúng hướng là MailMergeLib:

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

Bạn có thể cho rằng một thử, nhưng nó không giải quyết tất cả các vấn đề của chúng tôi. Bây giờ chúng tôi chuyển sang Aspose.Email. Nó tốt hơn nhưng vẫn không hoàn hảo, chúng tôi vẫn có chủ đề, nhưng bây giờ chỉ trên Mac và iPhone, nhưng họ đang làm việc trên một bugfix.

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

Bạn có thể dùng thử miễn phí. Có các thư viện email khác trên mạng.
http://www.chilkatsoft.com/products.asp

Sẽ rất xen kẽ nếu bạn tìm ra điều gì đó khác.

Các vấn đề liên quan