跳转到主要内容

于 2025年04月22日 摘录自  Postfix + Maildrop Howto

简介

本文讨论了将邮件投递代理集成到 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) 投递代理进行投递的文本。