如果 MTA 探测并发现要对邮件重新格式化,它将接下去检查邮件的每个部分。如果找到任意文本部分,其字符集参数将被用于生成第二次探测。仅当 MTA 已经检查并发现可能需要转换时,才执行第二次探测。第二次探测中的输入字符串外观如下:
IN-CHAN=in-channel;OUT-CHAN=out-channel;IN-CHARSET=in-char-set
in-channel 和 out-channel 如上所述,in-char-set 是与前面提到的特定部分相关联的字符集的名称。如果第二次探测未出现匹配,将不执行字符集转换(尽管可能会根据第一次探测中匹配的关键字执行邮件的重新格式化 [例如,对 MIME 结构的更改])。如果出现匹配,将生成以下格式的字符串:
OUT-CHARSET=out-char-set
其中 out-char-set 指定应将 in-char-set 转换成的字符集的名称。请注意,这两个字符集都必须在位于 MTA 表格目录中的字符集定义表 charsets.txt 中进行定义。如果该文件中未对字符集进行正确定义,将不进行转换。这通常不成问题,因为该文件定义了几百个字符集;目前使用的大多数字符集在该文件中都有定义。有关 charsets.txt 文件的详细信息,请参见 imsimta chbuild(UNIX 和 NT)实用程序的说明。
如果满足所有条件,MTA 接下去将建立字符集映射并进行转换。将使用邮件部分转换成的字符集的名称对已转换的邮件部分进行重新标记。
字符集转换映射已扩展为可以提供以下几种附加功能:
可以在映射条目的输出模板中指定 IN-CHARSET 选项。如果指定此选项,则将覆盖编码词中指定的字符集。
可以指定接受整数 0 或 1 的 RELABEL-ONLY 选项。如果此选项的值为 1,则 OUT-CHARSET 只是替换 IN-CHARSET,而不会进行重新标记。
如果使用 IN-CHARSET 选项将输入字符集设置为 *,则将“依据”此字符集来确定合适的标签。
假定在本地使用 ISO-8859-1,但需要将此字符集转换为 UTF-8 才能在 Internet 上使用。特别地,假定是通过 tcp_local 连接到 Internet,并且 tcp_internal 和 ims-ms 分别是内部邮件的源通道和传送通道。以下显示的 CHARSET-CONVERSION 表是以上述假定为前提进行的转换。请注意,每个 IN-CHAN 条目都必须单成一行。反斜杠 (\) 用于表示这一点。
CHARSET-CONVERSION IN-CHAN=tcp_internal;OUT-CHAN=tcp_local;CONVERT Yes IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;CONVERT Yes IN-CHAN=tcp_local;OUT-CHAN=ims-ms;CONVERT Yes IN-CHAN=*;OUT-CHAN=*;CONVERT No IN-CHAN=tcp_internal;OUT-CHAN=tcp_local;IN-CHARSET=ISO-8859-1 OUT-CHARSET=UTF-8 IN-CHAN=tcp_local;OUT-CHAN=tcp_internal;IN-CHARSET=UTF-8 OUT-CHARSET=ISO-8859-1 IN-CHAN=tcp_local;OUT-CHAN=ims-ms;IN-CHARSET=UTF-8 OUT-CHARSET=ISO-8859-1 |
下面显示的 CHARSET-CONVERSION 表指定了在本地使用的 EUC-JP 和基于 JP 代码的 ISO 2022 之间的相互转换。
CHARSET-CONVERSION IN-CHAN=ims-ms;OUT-CHAN=ims-ms;CONVERT No IN-CHAN=tcp_internal;OUT-CHAN=ims-ms;CONVERT No IN-CHAN=tcp_internal;OUT-CHAN=tcp_internal;CONVERT No IN-CHAN=tcp_internal;OUT-CHAN=*;CONVERT Yes IN-CHAN=*;OUT-CHAN=ims-ms;CONVERT Yes IN-CHAN=*;OUT-CHAN=tcp_internal;CONVERT Yes IN-CHAN=tcp_internal;OUT-CHAN=*;IN-CHARSET=EUC-JP OUT-CHARSET=ISO-2022-JP IN-CHAN=*;OUT-CHAN=ims-ms;IN-CHARSET=ISO-2022-JP OUT-CHARSET=EUC-JP IN-CHAN=*;OUT-CHAN=tcp_internal;IN-CHARSET=ISO-2022-JP OUT-CHARSET=EUC-JP |