关键字:charset7、charset8、charsetesc、sevenbit、eightbit、eightnegotiate、eightstrict
MIME 规范提供了一种机制,用以标记纯文本邮件中使用的字符集。特别是,可以将 charset= 参数指定为 Content-type: 标题行的一部分。MIME 中定义了各种字符集名称,包括 US-ASCII(默认)、ISO-8859-1、ISO-8859-2 以及随后定义的许多其他字符集。
某些现有系统和用户代理不提供生成上述字符集标记的机制;因此某些纯文本邮件可能未被正确标记。charset7、charset8 和 charsetesc 通道关键字提供了针对每个通道的机制,用以指定字符集名称,该名称将被插入到缺少字符集标记的邮件标题中。每个关键字都需要一个参数来指定字符集名称。系统不检查名称的有效性。但是请注意,只能对 MTA 表格目录的字符集定义文件 charsets.txt 中指定的字符集进行字符集转换。如果可能,请使用该文件中定义的名称。
如果邮件仅包含七位字符,则使用 charset7 字符集名称;如果在邮件中发现八位数据,则使用 charset8 字符集名称;如果邮件仅包含七位数据并同时包含转义符,则使用 charsetesc。如果未指定正确的关键字,字符集名称将不被插入到 Content-type: 标题行。
请注意,charset8 关键字还控制邮件标题中 8 位字符的 MIME 编码(标题中 8 位数据是绝对非法的)。如果未指定 charset8 值,MTA 通常对邮件标题中遇到的所有(非法)8 位数据进行 MIME 编码,将其标记为未知字符集。
这些字符集规范不会覆盖现有的标记,也就是说,如果邮件已经具有字符集标记或者不属于文本类型的邮件,则字符集规范没有任何影响。通常应当对 MTA 本地通道进行如下标记:
l ... charset7 US-ASCII charset8 ISO-8859-1 ... hostname |
如果邮件中没有 Content-type 标题,将添加该标题。如果缺少 MIME-version: 标题行,此关键字还将添加该标题行。
如果通道接收的未标记邮件使用了日语或韩语字符集并包含转义符,charsetesc 关键字将尤其有用。
某些传输限制使用带有大于 127(十进制)的序数值的字符。尤其需要注意的是,某些 SMTP 服务器会删除高位值,因而使用上述八位范围中的字符的邮件将出现乱码。
Messaging Server 提供了对这类邮件进行自动编码的功能,以便有问题的八位字符不直接出现在邮件中。通过指定 sevenbit 关键字,可以将该编码功能应用到所有加入给定通道队列的邮件。如果不存在此类限制,通道应标记为 eightbit。
SMTP 协议不允许使用 eightbit,“除非远程 SMTP 服务器明确声称支持允许 eightbit 的 SMTP 扩展”。事实上,某些传输(如扩展的 SMTP)可能会支持某种形式的协商,以确定是否可以传输八位字符。因此,强烈建议使用 eightnegotiate 关键字,以便在协商失败时指示通道对邮件进行编码。这是所有通道的默认设置;不支持协商的通道将假定传输可以处理八位数据。