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*/
và /*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") và dấu phẩy văn bản (ví dụ", '), người nhận xem sự hư hỏng trong email anh nhận:
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:
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? –
@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? –
Đ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. –