邮件头“From”有时不使用System.Net.Mail和.NET Framework 2.0编码

时间:2010-08-03 12:10:06

标签: c# encoding asp.net-2.0 system.net.mail

问候。

我在这里查看了一些其他问题条目,例如this one,但找不到与我相同的问题。也许这里的古茹曾经历过类似的事情。

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

  1. 对于它发送的所有电子邮件 out,它使用相同的电子邮件 地址,显示名称和编码 (“{”)中的{Encoding.UTF8) 标题(MailAddress 对象已创建)。显示名称 总是一个字,其中包含一个 非ASCII字符。
  2. 每种类型的消息都有自己的消息 方法生成MailAddressMailAddressCollection个对象 在他们称之为共同方法之前 使用诸如from,to之类的参数 主体,身体(反过来 实际上使用传输消息 一个MailMessage对象和一个 SmtpClient对象)。
  3. 生成大多数邮件类型 正确地,使用base64和utf-8 编码标题(包括“From”)。
  4. 但是,对于一种特定类型的消息,全部 字段除了“From”被编码 正常。在这些消息中, 从字段的显示名称不是 编码,导致 要显示的非ASCII字符 作为一个奇怪的符号和邮件 网关唠叨不好 编码。
  5. 以下是正确编码的From字段的示例:

      

    来自:=?utf-8?B?QnJ1a2Vyc8O4a25hZA ==?=< munged@munged.tld>

    以下是根本未编码的From字段的示例:

      

    来自:“Brukers knad”< munged@munged.tld>

    顺便说一下,非ASCII字符应该是“ø”。

    以下是为From创建MailAddress对象的代码行(对于无法编码此字段的消息类型:

    mailSender = new MailAddress(Settings.SettingFromDB.Email_SenderAddress,
        Settings.SettingFromDB.Email_SenderName, Encoding.UTF8);
    

    同样,这是一行代码(对于相同类型的消息)为To创建MailAddress对象(唯一的区别是它使用MailAddressCollection):

    mailTo = new MailAddressCollection();
    mailTo.Add(new MailAddress(objSøknad.Creator.Email, objSøknad.Creator.FullName,
        Encoding.UTF8));
    

    最后但并非最不重要的是,这里是为From创建一个MailAddress对象的行,其中所有字段总是正确编码(它与上面的相同) !):

    mailSender = new MailAddress(Settings.SettingFromDB.Email_SenderAddress,
        Settings.SettingFromDB.Email_SenderName, Encoding.UTF8);
    


    主题始终以相同的方式编码(Encoding.UTF8),生成MailMessage对象并对主体进行编码的方法始终相同(对所有消息调用的常用方法)。并且,正确编码的标头始终在所有消息中进行base64编码(不是quoted-printable)。

1 个答案:

答案 0 :(得分:1)

创建一个文件夹并让代码将消息发送到该文件夹​​。接下来,双击它以使其在Outlook中显示该消息。较旧版本的Outlook可能无法正确显示该项目,但Outlook 2010可能会。对于每个Outlook版本中启用了unicode的字段,它是一个混合包 - 在该区域中已经有了一些进展。您还可以使用Windows Live邮件查看邮件,以查看是否可以重现问题。此外,您可以使用.NET和CDOSYS代码来删除MIME并显示结果。