0

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

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

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

4

1 回答 1

2

简短的回答是否定的。

现在,我将详细说明原因。正确的 i18n-ed 邮件消息支持以下功能:

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

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

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

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

于 2010-10-24T19:40:44.903 回答