我一直在寻找如何做到这一点的资源,但没有太多的运气。
我正在运行一个基于Postfix和Courier with MySQL的工作MTA / MUA作为虚拟用户的后端。 我基于我的系统在下面的文章:
https://help.ubuntu.com/community/PostfixCompleteVirtualMailSystemHowto
这是很好的,直到空的部分! 我的SMTP / IMAP设置工作得很好,我设法得到SpamAssassin和ClamAV以及我在网上find的一些单独的文档。
我需要帮助的是设置Postfix使用Procmail作为mailbox_command,以便它可以与虚拟用户一起使用。 我希望能够为每个虚拟用户分别定义不同的Procmail规则。 我读过Postfix文档,据我所知,mailbox_command的默认function只适用于本地(非虚拟)用户。
提前致谢!
更新:
自从这篇文章,我已经认识到,mailbox_command不是成立的。 相反,我find了一个使用transport_maps来做到这一点的方法。 在下面阅读我自己的答案。
创build一个全局procmailrc,并为每个用户制定一个这样的规则:
:0 ^[email protected] | /usr/bin/procmail -m /etc/procmailrcs/someuser
/ etc / procmailrcs /中的每个文件通常的最终规则应该是通过pipe道传递消息来传递(8)。
如果你有很多用户,并且不想维护这种性质的文件,那么可以考虑编写一个parsing邮件头文件的脚本来找出/ etc / procmailrcs /中的哪个文件,并相应地执行procmail,然后设置脚本作为您的mailbox_command。
这篇文章是有帮助的: http : //www.linuxbackups.org/virtual-procmail 。
我必须克服两个问题。 首先,解决scheme需要一个静态文件来保存用户/传输地图。 我需要一个虚拟解决scheme。 所以,而不是创build/ etc / postfix / transport,我的main.cf说:
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