正如上面所说的“ego2dot0”,您不需要任何 MDA 过滤器(筛子等)来执行此操作。可以单独使用 Postfix 来完成,虽然我花了一段时间才弄清楚如何去做。
您必须同时使用 sender_bcc_maps 和 virtual_mailbox_maps 功能。
您必须使用专门用于复制到自己的虚拟域。如果您的实际域是“your.domain.tld”,您可以使用例如。子域“copyself.your.domain.tld”。该子域不必实际存在,即。在 DNS 中定义(此外,最好不定义,这样就不会有人不小心从外部向它发送邮件)。它是一个纯虚拟域,只有 Postfix 才能识别。
1) 将 sender_bcc_maps 配置为从 user@your.domain.tld 到 user@copyself.your.domain.tld 的密件抄送邮件。您可以使用常规“散列”类型映射仅对少数选定用户执行此操作,也可以使用 PCRE 类型映射和正则表达式同时为所有用户执行此操作。
2) 您必须在 virtual_mailbox_domains 中定义您的虚拟域,如下所示:
virtual_mailbox_domains=copyself.your.domain.tld
3) 配置virtual_mailbox_maps,使地址“user@copyself.your.domain.tld”的目标邮箱是用户“user”的实际“Sent”邮箱。例如(假设您使用常规系统用户和 Maildir 格式 - 就像在我的情况下)用户“user”的“Sent”邮箱路径将是“/home/user/Maildir/.Sent”。因此,您可以将路径的公共部分定义为 virtual_mailbox_base,例如。
virtual_mailbox_base=/home
然后在虚拟邮箱映射中输入路径的其余部分,如下所示:
user@copyself.your.domain.tld user/Maildir/.Sent/
(尾随 / 对指示 Maildir 格式很重要)。
同样,您可以使用 PCRE 类型映射为所有用户执行此操作。
4) 为了正确地将邮件保存到邮箱,Postfix 还需要知道特定用户的正确 UID 和 GID,因此您必须使用 virtual_uid_maps 和 virtual_gid_maps参数也一样。如果您使用的是虚拟用户,那么定义“静态”类型映射可能就足够了,该映射指定拥有所有虚拟邮箱的系统用户的单个 UID 和 GID。但是,如果您使用像我这样的系统用户,则需要为任何用户提供正确的实际 UID 和 GID。如果您只有几个用户,您可以使用常规的“散列”类型映射,其条目如下:
user@copyself.your.domain.tld 2001
或者您可以尝试使用“pipemap”映射类型设置管道,该管道使用一些 PCRE 映射和“unix:passwd.byname”映射来获取所有用户的 UID 和 GID(我还没有完成这部分,因为我的 Postfix 安装是在没有“pipemap”类型支持的情况下编译的)。
所以总结一下,使用这样的东西:
在 /etc/postfix/main.cf 文件中,添加以下行:
sender_bcc_maps=hash:/etc/postfix/sender_bcc
virtual_mailbox_domains=copyself.your.domain.tld
virtual_mailbox_base=/home
virtual_mailbox_maps=hash:/etc/postfix/copyself
virtual_uid_maps=hash:/etc/postfix/copyself_uids
virtual_gid_maps=hash:/etc/postfix/copyself_gids
/etc/postfix/sender_bcc 包含一堆行,例如:
user@your.domain.tld user@copyself.your.domain.tld
/etc/postfix/copyself 分别包含如下行:
user@copyself.your.domain.tld user/Maildir/.Sent/
/etc/postfix/copyself_uids 和 /etc/postfix/copyself_gids 分别包含以下行:
user@copyself.your.domain.tld 2001
我已经在我的服务器上完成了这项工作,对我来说效果很好。