代码之家  ›  专栏  ›  技术社区  ›  Alex Angas Colin

为邮件的每个部分设置编码

  •  0
  • Alex Angas Colin  · 技术社区  · 15 年前

    我的目标是面向国际市场的.NET应用程序,需要实现邮件发送功能。我注意到了 MailMessage 类有几个设置编码的选项:

    我在应用程序的配置页面中添加了一个下拉列表来选择邮件编码。

    将邮件的每个属性设置为使用此编码是最佳做法吗?全世界的邮件服务器和客户机会处理它吗?或者应该只有一些这样设置?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Paweł Dyda    15 年前

    简短的回答是 .

    现在,我要详细说明 为什么? . 正确的i18n Ed邮件消息支持以下功能:

    • 国际化域名(idna)支持从和到报头(以及cc、bcc、reply-to等)
    • 主题和其他标题的可识别和安全编码
    • 正确的正文编码

    目前,i18n ed域名是基本的ASCII字符串,通过punycode编码(您可以在 RFC 3492 , RFC 5891 RFC 5890 )长话短说,你应该用 IdnMapping 类从UTF-16字符串转换为ASCII(可以通过调用 GetAscii() 方法。

    通过对主题行和其他(非类似地址的)头的安全编码,我的意思是目前,它仍然是7位安全的,因为相当多的旧的和过时的邮件传输代理不支持8位编码。因此,您实际上可以在这里支持用户的选择,但是如果用户选择了类似于ISO-8859-X、KOI-8-X或shift-jis的内容,我建议使用引用的可打印或base64算法对头文件进行进一步编码,以确保这一点。如果用户选择UTF-8,则可以使用UTF-7以及QP或B64对头文件进行编码。

    最后,您可以甚至应该支持用户为电子邮件正文选择的编码。但是,如果它是16位基(如ucs2或utf-16),我建议将传输编码设置为base64。