Asp.net C#特殊字符的电子邮件地址

4
我正在使用集成的System.Net.Mail发送电子邮件。
我很喜欢。
MailAddress abs = new System.Net.Mail.MailAddress("my@email.com", "Web Präsenz", System.Text.Encoding.UTF8);

当电子邮件发送给客户端时,“ä”字符丢失了。似乎存在某些编码问题。有谁知道如何解决它?

你尝试过Unicode编码(即UTF-16)吗? - Noldorin
好的,我会尝试翻译。但是你认为有必要吗?虽然UTF-8似乎足以支持所有字符。 - Tuan Nguyen
你(未命名)的客户是否也理解UTF-8呢? - Rowland Shaw
UTF-8 看起来是电子邮件的标准,但还值得尝试。也许 UTF-8 就是正确的编码方式,你只需要指定不同的参数(构建一个新的 UTF8Encoding 并使用它)。 - Noldorin
虽然不知道它的 Outlook 版本,但它是客户的电脑。UTF-8 和 Unicode 也无法解决这个问题。 - Tuan Nguyen
请注意,MailMessage类中的电子邮件地址存在非ASCII字符问题,具体信息请参考support.microsoft.com/kb/2576045。 - David d C e Freitas
2个回答

4

也尝试添加以下内容:

message.BodyEncoding =  System.Text.Encoding.UTF8;
message.SubjectEncoding = System.Text.Encoding.UTF8;

这可能也是一个邮件服务器问题。尝试将其发送到各种电子邮件地址;POP3、WebMail等。

这里还有更多信息,但你可能已经看过了:

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx


2
我刚刚花了5个小时调试类似的问题,我找到的解决方法可能也适用于这个问题。由于没有人发布其他解决方案,所以我将贡献我的发现。
在.NET2.0邮件API中存在一个微妙的错误,导致邮件头中收件人名称的编码失败。如果在发送邮件之前访问MailMessage实例的To属性(可能还有其他属性),就会出现此问题。
以下示例将导致To header在未编码的情况下发送,至少会使我的邮件客户端显示名称为“??????...”:
MailMessage message = new MailMessage();
message.To.Add(new MailAddress("address@example.com", "ÆØÅ Unicode Name"));
message.Subject = "Subject";
message.Body = "Body";
Console.WriteLine(message.To[0]);
smtpClient.Send(message);

然而,将WriteLine移至send行以下会导致To标头被正确编码:
MailMessage message = new MailMessage();
message.To.Add(new MailAddress("address@example.com", "ÆØÅ Unicode Name"));
message.Subject = "Subject";
message.Body = "Body";
smtpClient.Send(message);
Console.WriteLine(message.To[0]);

我认为这个 bug 也会发生在抄送和秘密抄送属性上,所以请注意。希望有人能发现这个有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接