问候。
我在这里查看了其他一些问题条目,例如这个,但没有发现与我遇到的相同问题。也许这里的一位大师过去曾经历过类似的事情。
基本上,我正在创建一个 ASP.NET 2.0 Web 应用程序,它有时需要发送电子邮件(使用 System.Net.Mail),但我遇到了奇怪且不一致的行为。
- 对于它发出的所有电子邮件,它
Encoding.UTF8
在“发件人”标头(为其MailAddress
创建对象)中使用相同的电子邮件地址、显示名称和编码 ( )。显示名称始终是一个单词,其中包含一个非 ASCII 字符。 - 每种类型的消息都有自己的方法生成
MailAddress
和MailAddressCollection
对象,然后它们调用带有参数的公共方法,例如 from、to、subject、body(这反过来又使用MailMessage
对象和SmtpClient
对象实际传输消息)。 - 大多数消息类型都是正确生成的,带有 base64 和 utf-8 编码的标头(包括“From”)。
- 然而,对于一种特定类型的消息,除“From”之外的所有字段都被正确编码。在这些邮件中,From 字段的显示名称根本没有编码,导致非 ASCII 字符显示为一个奇怪的符号,并且邮件网关抱怨编码错误。
以下是正确编码的 From 字段的示例:
来自:=?utf-8?B?QnJ1a2Vyc8O4a25hZA==?= <munged@munged.tld>
这是一个根本没有编码的 From 字段的示例:
来自:“Brukers�knad”<munged@munged.tld>
顺便说一下,非 ASCII 字符应该是“ø”。
这是MailAddress
为 From 创建对象的代码行(对于该字段编码失败的消息类型:
mailSender = new MailAddress(Settings.SettingFromDB.Email_SenderAddress,
Settings.SettingFromDB.Email_SenderName, Encoding.UTF8);
同样,这里有一行代码(对于相同类型的消息)MailAddress
为 To 创建对象(唯一的区别是它使用 a MailAddressCollection
):
mailTo = new MailAddressCollection();
mailTo.Add(new MailAddress(objSøknad.Creator.Email, objSøknad.Creator.FullName,
Encoding.UTF8));
最后但并非最不重要的一点是,这是MailAddress
为 From 为所有字段都正确编码的消息类型创建对象的行(它与上面的相同!):
mailSender = new MailAddress(Settings.SettingFromDB.Email_SenderAddress,
Settings.SettingFromDB.Email_SenderName, Encoding.UTF8);
主题始终以相同的方式进行编码(Encoding.UTF8
),生成MailMessage
对象和编码主体的方法始终相同(所有消息都调用通用方法)。而且,正确编码的标头始终在所有消息中进行 base64 编码(不可引用打印)。