我一直在寻找有关如何做到这一点的资源,但没有太多运气。
我正在运行一个基于 Postfix 和 Courier 的 MTA/MUA,并使用 MySQL 作为虚拟用户的后端。我的系统基于以下文章:
https://help.ubuntu.com/community/PostfixCompleteVirtualMailSystemHowto
直到空白部分之前,一切都很好!我的 SMTP/IMAP 设置运行良好,我还设法安装了 SpamAssassin 和 ClamAV,并找到了一些我在网上找到的单独文档。
我需要帮助的是设置 Postfix 以使用 Procmail 作为 mailbox_command,以便它可以与虚拟用户一起工作。我希望能够为每个虚拟用户分别定义不同的 Procmail 规则。我已阅读 Postfix 文档,据我了解,mailbox_command 的默认功能仅适用于本地(非虚拟)用户。
提前致谢!
更新:
自从这篇文章发表以来,我意识到 mailbox_command 是站不住脚的。相反,我找到了一种使用 transport_maps 来实现这一点的方法。请阅读下面我自己的回答。
答案1
创建一个全局的 procmailrc,并为每个用户制定如下规则:
:0
^[email protected]
| /usr/bin/procmail -m /etc/procmailrcs/someuser
/etc/procmailrcs/ 中每个文件的通常最终规则应该是将消息通过管道传送到 deliver(8)。
如果您有许多用户并且不想维护这种性质的文件,那么可以考虑编写一个脚本来解析邮件头以找出需要 /etc/procmailrcs/ 中的哪个文件并相应地执行 procmail,并将该脚本设置为您的 mailbox_command。
答案2
这篇文章很有帮助: http://www.linuxbackups.org/virtual-procmail。
我必须克服两个问题。首先,解决方案需要一个静态文件来保存用户/传输图。我需要一个虚拟解决方案。因此,我的 main.cf 不是创建 /etc/postfix/transport,而是说:
transport_maps = mysql:/etc/postfix/mysql_virtual_transport_maps.cf
这是我的mysql_virtual_transport_maps.cf:
user = ******
password = ******
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = transport
where_field = username
这样就解决了“虚拟”要求。另一个问题是我的目录结构与 procmailrc.common 示例不同。这是我的 procmailrc.common:
:0
* RECIPIENT ?? .*@\/.*$
{ DOMAIN = "$MATCH" }
#added RECIPIENT variable and we extract domain name
MAILDIR="$HOME/$DOMAIN/$USER@$DOMAIN"
DEFAULT="$MAILDIR/"
LOGFILE="./procmail.log"
VERBOSE=YES
#each user will set his own log file
NL="
"
WS=" "
SWITCHRC="$HOME/$DOMAIN/$USER@$DOMAIN/.procmail"
希望这可以为其他尝试做类似事情的人提供帮助。
-aj