【问题标题】: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 3492、RFC 5891 和 RFC 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。