Sun Java System Messaging Server 6 2005Q4 管理指南

正向查找表和 FORWARD 地址映射

地址反向不会应用于信封的 To: 地址。省略此操作的原因相当明显—信封的 To: 地址随着邮件在邮件系统中的传送,不断地被重写和修改。路由的整体目标是将信封的 To: 地址转换为不断增加的系统和特定于邮箱的格式。地址反向的规范化功能完全不适合于信封的 To: 地址。

在任何情况下,均可以在 MTA 中使用大量的工具替换信封的 To: 地址。别名文件、别名数据库及常规查找表恰好具备此功能。

MTA 还提供正向查找表和 FORWARD 映射,可用于特殊种类的转发目的,例如,基于模式的转发、特定于源的转发或地址的自动注册。请注意,正向查找表和 FORWARD 映射主要用于一些特殊种类的地址转发,大多数种类的地址转发可以使用 MTA 的某一其他转发机制更好地执行。

信封的 To: 地址的各种替换机制与反向查找表的功能等效,但是上面讨论的机制中还没有哪一种与反向映射功能等效。而且确实会发生需要对信封的 To: 地址使用映射功能的情况。

FORWARD 映射表

FORWARD 映射表提供了基于模式的转发功能和特定于源的转发机制。如果映射文件中存在 FORWARD 映射表,它将应用于每一个信封的 To: 地址。如果该映射表不存在或没有映射匹配条目,则不会进行任何更改。

如果地址匹配某个映射条目,则将测试映射结果。如果该条目指定$Y,结果字符串将替换信封的 To: 地址;如果指定 $N,将放弃映射结果。有关其他标志的列表,请参见表 10–8

表 10–8 FORWARD 映射表标志说明

标志 

说明 

$D 

在重写进程中再次运行输出 

$G 

在正向查找表中运行输出(如果已启用正向查找表) 

$H 

禁用进一步的正向查找表或 FORWARD 映射查找 

$I 

将邮件保存为 .HELD 文件

$N 

地址保留不变 

$Y 

将输出用作新地址 

在执行任何正向查找表查找之前,都会查询 FORWARD 映射(如果存在)。如果已通过 USE_FORWARD_DATABASE 的相应设置启用了正向查找表,则当 FORWARD 映射匹配且具有标志 $G 时,会将 FORWARD 映射的结果与正向查找表进行核对。(请注意,如果已指定特定于通道的正向查找表,则在正向查找表中进行查找之前,会将源地址和源通道置于 FORWARD 映射的结果之前。)如果匹配的 FORWARD 映射条目指定了 $D,则 FORWARD 映射(和可选的转发表查找)的结果将在 MTA 地址重写进程中再次运行。如果匹配的 FORWARD 映射条目指定了 $H,则在后续地址重写(使用 $D 的结果)期间将不会执行进一步的 FORWARD 映射或数据库查找。

以下示例说明了复杂的 REVERSEFORWARD 映射的使用。假设系统或与 mr_local 通道关联的名为 am.sigurd.innosoft.com 的伪域生成通用格式的 RFC 822 地址:

"lastname, firstname"@am.sigurd.example.com

"lastname,firstname"@am.sigurd.example.com

尽管这些地址完全合法,但它们经常会使不完全符合 RFC 822 语法规则的其他邮件程序(例如没有正确处理引用地址的邮件程序)产生混淆。因此,不要求引用的地址格式可用于更多的邮件程序。此类格式之一为

firstname.lastname@am.sigurd.example.com

复杂的 FORWARD 和 REVERSE 映射的示例:

REVERSE

 *|mr_local|"*,$ *"@am.sigurd.example.com $Y"$1,$ $2"@am.sigurd.example.com
 *|mr_local|"*,*"@am.sigurd.example.com   $Y"$1,$ $2"@am.sigurd.example.com
 *|*|"*,$ *"@am.sigurd.example.com        $Y$3.$2@am.sigurd.example.com
 *|*|"*,*"@am.sigurd.example.com          $Y$3.$2@am.sigurd.example.com
 *|mr_local|*.*@am.sigurd.example.com     $Y"$2,$ $1"@am.sigurd.example.com
 *|*|*.*@am.sigurd.example.com            $Y$2.$3@am.sigurd.example.com

FORWARD

 "*,$ *"@am.sigurd.example.com            $Y"$0,$ $1"@am.sigurd.example.com
 "*,*"@am.sigurd.example.com              $Y"$0,$ $1"@am.sigurd.example.com
 *.*@am.sigurd.example.com                $Y"$1,$ $0"@am.sigurd.example.com

因此,以上示例中的样例映射表的目的有三个方面。(1) 允许使用以上三种地址格式中的任何一种。(2) 仅对 mr_local 通道显示原始格式的地址,必要时进行格式转换。(3) 仅对所有其他通道显示最新未引用格式的地址,必要时进行格式转换。(以上 REVERSE 映射中,假设已设置了 MTA 选项 USE_REVERSE_DATABASE 中的第 3 位。)

正向查找表

当地址转发需要进行自动注册或特定于源时,可以使用正向查找表。请注意,通常不应使用正向查找表进行邮件的简单转发;执行此类转发时,使用 aliases 文件或别名查找表效率更高。默认情况下不会使用正向查找表,必须通过 USE_FORWARD_DATABASE 选项明确启用后才能使用该表。转发表查找是在执行了地址重写和别名扩展,且检查了所有 FORWARD 映射之后执行的。如果正向表查找成功,则结果替换地址将在整个 MTA 地址重写进程中再次运行。

有两种正向查找表机制,即内存内散列表或常规数据库。除非表的大小过分大,否则建议使用散列表。(1,000 不会受到限制,但是 100,000 就会受到限制)。通过设置 use_text_database 选项中的第 3 位(值为 34)和 use_forward_database 启用散列表。散列表从 msg_svr_base/configure/forward.txt 中读取,它经过编译成为配置的可重新装入的部分,并可通过 imsimta reload 命令强制重新装入活动的 MTA 进程。

转发数据库是一个 MTA crdb 数据库,是使用 crdb 实用程序从源文本文件创建的。源文本文件的默认格式为:


user1@domain1 changedmailbox1@changeddomain1
user2@domain2 changedmailbox@changeddomain2

但是,如果已通过设置 USE_FORWARD_DATABASE 选项中的第 3 位启用特定于源的转发数据库,源文本文件的格式为:

source-channel|source-address|original-address changed-address

例如,以下条目


tcp_limited|bob@blue.com|helen@red.com  "helen of troy"@siroe.com

如果且仅在邮件来自于bob@blue.com 且排队通道为 tcp_limited 时,将 To: 地址 address helen@red.com 映射为 "helen of troy"@siroe.com。