GENERIC(5)                                                          GENERIC(5)

名称
       generic - Postfix 通用地址映射表格式

摘要
       postmap /etc/postfix/generic

       postmap -q "字符串" /etc/postfix/generic

       postmap -q - /etc/postfix/generic <输入文件

描述
       可选的 generic(5) 表用于指定邮件投递时的地址映射规则,这与接收邮件时使用的
       canonical(5) 映射功能正好相反。

       典型应用场景是:当系统没有有效的互联网域名,而使用类似 localdomain.local 这样的本地域名时,
       可以通过 generic(5) 表,在 SMTP 客户端 smtp(8) 发送邮件到互联网时,
       将本地邮件地址转换为有效的互联网邮件地址。具体示例请参阅本文档末尾的"示例"部分。

       generic(5) 映射会同时影响:
       - 邮件头中的地址(即邮件正文内显示的地址)
       - 邮件信封地址(如 SMTP 协议命令中使用的地址)

       通常,generic(5) 表以文本文件形式创建,然后通过 postmap(1) 命令
       转换为 dbm 或 db 格式的索引文件,以提高邮件系统的查询效率。修改文本文件后,
       需要执行命令"postmap /etc/postfix/generic"来重建索引文件。

       当通过 NIS、LDAP 或 SQL 等其他方式提供映射表时,查询方式与普通索引文件相同。

       此外,还可以使用正则表达式映射表或基于 TCP 的查询服务。这两种特殊形式的
       查询方式将在下文"正则表达式表"和"TCP 查询表"部分详细说明。

大小写处理
       默认情况下,查询字符串在数据库查找前会被转换为小写。但从 Postfix 2.3 开始,
       使用 regexp: 或 pcre: 等支持大小写敏感匹配的数据库类型时,
       查询字符串将保持原有大小写格式。

表格式
       postmap(1) 命令的输入文件格式规范:

       模式 结果
              当邮件地址匹配 模式 时,将其替换为对应的 结果

       空行和注释:
              - 仅包含空白字符的行会被忽略
              - 以 # 开头的行被视为注释

       多行文本:
              - 非空白字符开头的行视为新记录的开始
              - 以空白字符开头的行视为上一记录的续行

查询顺序
       使用 DB、DBM 等索引文件或 NIS、LDAP、SQL 等网络查询服务时,
       每个 user@domain 格式的查询会按以下顺序尝试匹配模式,
       直到找到第一个匹配项:

       1. user@domain address
              - 精确匹配完整邮件地址
              - 优先级最高

       2. user address
              - 当域名满足以下条件时匹配:
                * 等于 $myorigin
                * 在 $mydestination 列表中
                * 在 $inet_interfaces 或 $proxy_interfaces 中

       3. @domain address
              - 匹配指定域名的所有地址
              - 优先级最低

结果地址重写规则
       查询结果的地址会经过以下处理:

       1. 当结果为 @其他域名 时:
              - 保持用户名不变,只替换域名部分

       2. 当配置"append_at_myorigin=yes"时:
              - 为不含@符号的地址追加"@$myorigin"

       3. 当配置"append_dot_mydomain=yes"时:
              - 为不含域名的地址追加".$mydomain"

地址扩展处理
       当邮件地址包含收件人分隔符时(如 user+foo@domain),
       查询顺序变为:
       1. user+foo@domain
       2. user@domain 
       3. user+foo
       4. user
       5. @domain

       参数 propagate_unmatched_extensions 控制是否将未匹配的
       地址扩展部分(如 +foo)保留到查询结果中。
正则表达式表
       当使用正则表达式形式(而非索引文件)定义映射表时,查询行为会有以下变化:
       具体语法请参考 regexp_table(5)pcre_table(5)。

       重要特性:
       1. 每个模式都是应用于完整地址的正则表达式
          - 不会自动拆分 user@domain 为用户名和域名
          - 不会自动分离 user+foo 中的地址扩展

       2. 按表中定义的顺序逐个尝试匹配
          - 找到第一个匹配的模式即停止

       3. 支持使用匹配组引用
          - 通过 $1、$2 等方式引用括号捕获的内容
          - 例如:将 "(.+)@domain" 替换为 "user-$1@newdomain"

TCP 查询表
       (Postfix 2.5 及以上版本支持)
       通过 TCP 服务器查询时的特殊处理方式:
       协议细节请参考 tcp_table(5)

       关键特点:
       1. 每次查询发送完整地址
          - 不进行任何预处理或拆分
          - 保持 user@domainuser+foo 的完整格式

       2. 响应处理方式
          - 与索引文件查询的结果处理规则完全一致
          - 支持所有地址重写功能

配置示例
       典型应用场景:将本地域名地址转换为互联网地址
       (假设 ISP 支持"+"格式的地址扩展)

       /etc/postfix/main.cf 配置:
           smtp_generic_maps = hash:/etc/postfix/generic

       /etc/postfix/generic 文件内容:
           [email protected]   [email protected]
           [email protected]   [email protected]
           @localdomain.local      [email protected]

       注意事项:
       1. 修改后需执行:postmap /etc/postfix/generic
       2. 某些系统可能使用 dbm 而非 hash 格式
       3. 通过 postconf -m 查看系统支持的数据库类型

已知限制
       当前版本的表格式解析器:
       - 不支持引号转义规范
       - 需避免在模式中使用特殊字符

相关配置参数
       主要参数(详见 postconf(5)):

       smtp_generic_maps
              类型:字符串
              默认:空
              功能:指定 SMTP 客户端使用的地址重写映射表

       propagate_unmatched_extensions
              类型:列表
              默认:canonical, virtual
              功能:控制是否保留未匹配的地址扩展(+foo)

       其他相关参数:

       inet_interfaces
              类型:列表
              默认:all
              功能:指定邮件系统监听的网络接口

       proxy_interfaces
              类型:列表
              默认:空
              功能:指定通过 NAT/代理接收邮件的虚拟接口

       mydestination
              类型:列表
              默认:$myhostname, localhost.$mydomain, localhost
              功能:定义本地投递的域名列表

       myorigin
              类型:字符串
              默认:$myhostname
              功能:设置外发邮件的默认域名

       owner_request_special
              类型:布尔
              默认:yes
              功能:控制对 owner-listname 特殊地址的处理方式
参见
       1. postmap(1)
          - Postfix 查询表管理工具
       2. postconf(5)
          - 配置参数详解
       3. smtp(8)
          - Postfix SMTP 客户端实现

参考文档
       1. ADDRESS_REWRITING_README
          - 地址重写完整指南
       2. DATABASE_README
          - Postfix 查询表技术综述
       3. STANDARD_CONFIGURATION_README
          - 标准配置方案示例

版权声明
       本软件遵循 Secure Mailer 许可证
       - 必须随软件完整分发许可证文本
       - 详情参见软件发行包中的 LICENSE 文件

版本历史
       发展里程碑:
       1. 源自 Sendmail MTA 的 generictable 功能
       2. Postfix 2.2 版本首次引入
       3. 持续更新至当前版本

作者信息
       Wietse Venema
       - 早期开发:
         IBM T.J. Watson 研究中心
         美国纽约州约克镇高地
         PO Box 704, 邮编 10598
       - 当前维护:
         Google 公司
         美国纽约州纽约市
         第八大道 111 号,邮编 10011

                                                                    GENERIC(5)