简介
本文讨论了将邮件投递代理集成到 Postfix 中的各种选项:
不使用本地投递代理的直接投递
Postfix 可以配置为直接将邮件投递到 maildrop,而无需使用 local(8) 投递代理作为中间环节。这意味着您不会得到本地 aliases(5) 别名扩展或 $HOME/.forward 文件处理。您通常会在没有 UNIX 用户主目录的收件人所属的 托管域名 上使用此方法。
以下示例演示了如何为 some.domain 和 someother.domain 使用 maildrop。该示例分为两部分。
部分 1 描述了对 main.cf 文件的修改:
1 /etc/postfix/main.cf: 2 maildrop_destination_recipient_limit = 1 3 virtual_mailbox_domains = some.domain someother.domain 4 virtual_transport = maildrop 5 virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox 6 virtual_alias_maps = hash:/etc/postfix/virtual_alias 7 8 /etc/postfix/virtual_mailbox: 9 [email protected] ...此处文本无关紧要... 10 [email protected] ...此处文本无关紧要... 11 [email protected] ...此处文本无关紧要... 12 13 /etc/postfix/virtual_alias: 14 [email protected] postmaster 15 [email protected] postmaster
- 第2行是必要的,以便Postfix每次向邮件投递代理提供一个收件人。
- 第 3 行告知 Postfix,some.domain 和 someother.domain 是所谓的 虚拟邮箱域。无需在 main.cf中列出这些名称,您也可以将它们列在一个文件中;有关详细信息,请参阅virtual_mailbox_domains文档。
- 第 4 行指定 some.domain 和 someother.domain 的邮件应由 maildrop 投递代理进行投递。
- 第 5 行和第 8-11 行指定 Postfix SMTP 服务器应接收邮件的收件人。这可防止邮件队列因无法投递的邮件而堵塞。若要禁用此功能,请指定空值("virtual_mailbox_maps =")。
- 第6行和第13-15行将发给postmaster的邮件重定向到本地postmaster。RFC 821要求每个域都必须有一个postmaster地址。
下文中的 vmail 用户 ID 是 maildrop 运行时使用的用户。如果所有虚拟邮箱的拥有者相同,则该用户为虚拟邮箱的拥有者。如果 maildrop 具有 suid 权限(参见 maildrop 文档),则 maildrop 会切换到适当的拥有者以投递邮件。
注意:请勿使用 postfix 用户作为 maildrop 用户。
部分 2 描述了对 master.cf 文件的修改:
/etc/postfix/master.cf: maildrop unix - n n - - pipe flags=ODRhu user=vmail argv=/path/to/maildrop -d ${recipient}
pipe(8) 手册页对上述命令行参数进行了详细说明,并提供了更多信息。
如果您希望支持用户名+扩展名@域名的地址格式,请使用以下命令:
/etc/postfix/master.cf: maildrop unix - n n - - pipe flags=ODRhu user=vmail argv=/path/to/maildrop -d ${user}@${domain} ${extension} ${recipient} ${user} ${nexthop}
邮件将被投递至 ${user}@${domain}(用于 maildrop 用户数据库查找的搜索键)。${extension} 及其他地址组件可作为 $1、$2、$3 等变量供 maildrop 规则使用,可在 master.cf 中省略,或在无需时被 maildrop 忽略。
在 Postfix 2.4 及更早版本中,请使用 ${nexthop} 代替 ${domain}。
通过本地投递代理进行间接投递
Postfix 可以配置为通过本地交付代理将邮件交付到 maildrop。与上述"直接"方法相比,这种方法稍显低效,但提供了本地 aliases(5) 别名扩展和 $HOME/.forward 文件处理的便利性。通常,您会将此方法用于在 mydestination 中列出的域,且这些域的用户拥有 UNIX 系统账户。
要为所有 UNIX 系统账户配置 maildrop 投递:
/etc/postfix/main.cf: mailbox_command = /path/to/maildrop -d ${USER}
注意:${USER} 需大写。
要仅为特定用户启用 maildrop 交付,您可以使用 Postfix local(8) 交付代理的 mailbox_command_maps 功能:
/etc/postfix/main.cf: mailbox_command_maps = hash:/etc/postfix/mailbox_commands /etc/postfix/mailbox_commands: you /path/to/maildrop -d ${USER}
也可以通过从用户的 $HOME/.forward 文件中调用 Maildrop 来为特定用户进行邮件投递:
/home/you/.forward:
"|/path/to/maildrop -d ${USER}"致谢
- 原始文本由 Russell Mosemann 友好提供。
- Victor Duchovni 提供了支持 user+foo@domain 地址的提示。
- Tonni Earnshaw 贡献了关于通过 local(8) 投递代理进行投递的文本。