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

将地址由内部格式转换为公用格式

使用地址反向数据库(又称为反向数据库)和 REVERSE 映射表,可以将地址由内部格式转换为公用的公布格式。例如,uid@mailhost.siroe.comsiroe.com 域中的有效地址,但它可能不适于向外公开。您可能更希望使用类似于 firstname.lastname@siroe.com 的公用地址。


注 –

Messaging Server 提供了其他地址处理工具,例如 aliases 文件和专门的映射表。但为了获得最佳性能,在可以执行地址操作时应使用重写规则。请参见第 11 章,配置重写规则


在反向数据库中,每个用户的公用地址都是由目录中用户条目的 mail 属性指定的。专用或内部地址由 mailAlternativeAddress 属性指定。分发列表也是一样。

反向数据库包含任何有效的地址与此公用地址之间的映射。反向数据库通常位于 MTA 数据库目录中。该数据库是名称由 msg_svr_base/config/imta_tailor 文件中的 IMTA_REVERSE_DATABASE 选项指定的文件,默认情况下文件为 msg_svr_base/data/db/reversedb.*

如果在数据库中找到了地址,则数据库右侧对应的内容将替换为该地址。如果未找到该地址,则会尝试在 mappings 文件中查找名为 REVERSE 的映射表。如果该表不存在或表中没有匹配的条目,则不进行替换且重写操作正常终止。

如果在 mappings 文件中找到了 REVERSE 映射表,并且地址与映射条目匹配,则则结果字符串将替换该地址(如果该条目指定了 $Y)。如果指定了 $N,将放弃映射结果。如果映射条目除指定了 $Y 以外,还指定了 $D,则结果字符串将在反向数据库中再运行一次;如果找到匹配内容,数据库中的模板将替换映射结果(从而替换地址)。通用 REVERSE 映射表条目(即,应用于所有通道的条目)的格式如下所示。注意,标志可以在新地址之前,也可以在新地址的结尾。


REVERSE

   OldAddress        $Y[Flags]NewAddress

      

特定于通道的条目(即,仅在邮件通过特定通道时才发生的映射)的格式如下所示。请注意,必须将 option.dat 中的 use_reverse_database 设置为 13,特定于通道的条目才能正常工作。


REVERSE

   source-channel|destination-channel|OldAddress  $Y[Flags]NewAddresS

      

表 10–7 中显示了 REVERSE 映射表标志。

表 10–7 REVERSE 映射表标志

标志 

说明 

$Y 

将输出作为新的地址。 

$N 

地址保留不变。 

$D 

在反向数据库中运行输出。 

$A 

将模式添加为反向数据库条目。 

$F 

将模式添加为正向数据库条目。 

标志比较

说明

$:B 

仅匹配标题(正文)地址。 

$:E 

仅匹配信封地址。 

$:F 

仅匹配指向前的地址。 

$:R 

仅匹配指向后的地址。 

$:I 

仅匹配邮件 ID。 

设置地址反向控制

reversenoreverse 通道关键字以及 MTA 选项 USE_REVERSE_DATABASEREVERSE_ENVELOPE 都可以用来控制何时以及如何应用地址反向的具体设置。默认情况下,地址反向操作应用于所有地址,不仅仅是指向后的地址。

通过设置 REVERSE_ENVELOPE 系统选项的值(默认值:1—打开,0—关闭)可以启用或禁用地址反向。

目标通道上的 noreverse 指定不对邮件中的地址应用地址反向。reverse 指定应用地址反向。有关详细信息,请参见启用特定于通道的反向数据库使用

USE_REVERSE_DATABASE 控制 MTA 是否将地址反向数据库和 REVERSE 映射用作替换地址的源。0 表示不在任何通道中使用地址反向。值为 5(默认值)指定在 MTA 地址重写进程执行重写后,对所有地址都应用地址反向(而不仅是应用于反向指向地址)。值为 13 指定在 MTA 地址重写进程执行重写后,对包含 reverse 通道关键字的地址应用地址反向(而不仅是应用于反向指向地址)。通过设置 USE_REVERSE_DATABASE 选项的位值,可以进一步精确地指定地址反向操作。有关详细信息,请参见《Sun Java System Messaging Server 6 2005Q4 Administration Reference》中的“Option File Format and Available Options”

REVERSE_ENVELOPE 选项用来控制是否将地址反向应用于信封 From 地址以及邮件标题地址。

有这些选项和关键字的作用的其他信息,请参见 Sun Java System Messaging Server Administration Reference 中的详细说明。

常规反向映射示例

以下是通用 REVERSE 映射的示例:假设 siroe.com 中内部地址的格式为 user@mailhost.siroe.com。而且,用户名称空间规则为:user@host1.siroe.comuser@host2.siroe.comsiroe.com 中的所有主机指定同一个人。以下 REVERSE 映射可以与地址反向数据库一起使用:

REVERSE

   *@*.siroe.com        $0@siroe.com$Y$D
            

在此示例中,格式为 name@anyhost.siroe.com 的地址将被更改为 name@siroe.com.$D 元字符使地址反向数据库可以被查询。地址反向数据库应包含以下格式的条目:

user@mailhost.siroe.com     first.last@siroe.com

            

特定于通道的反向映射示例

默认情况下,如果将路由能力范围设置为邮件服务器域,则将使用地址反向数据库。特定于通道的 REVERSE 映射表条目的示例如下:

REVERSE

   tcp_*|tcp_local|binky@macho.siroe.com    $D$YRebecca.Woods@siroe.com
            

此条目通知 MTA,对于源通道为 tcp_*、外发目标通道为 tcp_local 的所有邮件,都会将地址格式从 binky@macho.siroe.com 更改为 Rebecca.Woods@siroe.com


注 –

要启用特定于通道的反向映射,必须将 option.dat 中的 USE_REVERSE_DATABASE 选项设置为 13(默认值为 5)。


正向查找表和 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。