1

问候。

我在这里查看了其他一些问题条目,例如这个,但没有发现与我遇到的相同问题。也许这里的一位大师过去曾经历过类似的事情。

基本上,我正在创建一个 ASP.NET 2.0 Web 应用程序,它有时需要发送电子邮件(使用 System.Net.Mail),但我遇到了奇怪且不一致的行为。

  1. 对于它发出的所有电子邮件,它Encoding.UTF8在“发件人”标头(为其MailAddress 创建对象)中使用相同的电子邮件地址、显示名称和编码 ( )。显示名称始终是一个单词,其中包含一个非 ASCII 字符。
  2. 每种类型的消息都有自己的方法生成MailAddressMailAddressCollection对象,然后它们调用带有参数的公共方法,例如 from、to、subject、body(这反过来又使用MailMessage对象和 SmtpClient对象实际传输消息)。
  3. 大多数消息类型都是正确生成的,带有 base64 和 utf-8 编码的标头(包括“From”)。
  4. 然而,对于一种特定类型的消息,除“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 编码(不可引用打印)。

4

1 回答 1

1

创建一个文件夹并让代码将消息发送到该文件夹​​。接下来,双击它以使其在 Outlook 中显示该消息。旧版本的 Outlook 可能无法正确显示该项目,但 Outlook 2010 可能会。就每个 Outlook 版本中启用 unicode 的字段而言,它是一个好坏参半的问题 - 在该领域已经取得了进展。您还可以使用 Windows Live 邮件查看消息,看看您是否可以重现该问题。此外,您可以使用 .NET 和 CDOSYS 代码来削减 MIME 并显示结果。

于 2010-12-28T21:22:03.960 回答