【问题标题】:Setting encoding for every part of a MailMessage为 MailMessage 的每个部分设置编码
【发布时间】:2011-03-20 23:01:26
【问题描述】:

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

我在应用的配置页面中添加了一个下拉菜单来选择邮件消息编码。

最好将 MailMessage 上的每个属性都设置为使用这种编码吗?世界各地的邮件服务器和客户端会处理它吗?还是只应该这样设置一些?

【问题讨论】:

    标签: .net encoding internationalization mailmessage


    【解决方案1】:

    简短的回答是

    现在,我将详细说明为什么。正确的 i18n-ed 邮件消息支持这些功能:

    • 国际化域名 (IDNA) 支持 From 和 To 标头(以及 CC、BCC、Reply-To 等)
    • 主题和其他标题的可识别和安全编码
    • 正确的正文编码

    目前,i18n-ed 域名是基本的 ASCII 字符串,通过 Punycode 编码(您可以在 RFC 3492RFC 5891RFC 5890 中了解更多信息)。长话短说,您应该使用 IdnMapping 类将 UTF-16 字符串转换为 ASCII(您可以通过调用 GetAscii() 方法来实现。

    通过对主题行和其他(非地址类)标头进行安全编码,我的意思是目前,它应该仍然是 7 位安全的,因为很多旧的和过时的邮件传输代理不支持 8位编码在这里。因此,您实际上可以在这里支持用户的选择,但如果用户选择 ISO-8859-x、KOI-8-x 或 Shift-JIS 之类的东西,我建议使用 Quoted Printable 或 Base64 算法进一步编码标头,以确保.如果用户选择 UTF-8,您可以使用 UTF-7 以及 QP 或 B64 对标头进行编码。

    最后但同样重要的是,您可以甚至应该支持用户选择的电子邮件正文编码。但是,如果它是 16 位基础(如 UCS2 或 UTF-16),我建议将传输编码设置为类似 Base64。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 2012-09-30
    • 1970-01-01
    • 2015-03-27
    • 2013-04-08
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多