我正在 Debian 机器上设置一个小型电子邮件服务器,它需要从各种 POP 服务器获取邮件并根据地址确定发送给谁,但我不清楚什么软件可以满足我的需要,尽管这看起来像一个非常简单的问题!
例如,我有 2 个用户,Alice 和 Bob。
任何电子邮件爱丽丝@domain.example.com ([电子邮件保护]等)应发送给 Alice,而发往 domain.example.com 的所有其他邮件应发送给 Bob。任何发往[电子邮件保护]应该交给鲍勃,[电子邮件保护]应该发给 Alice 任何发给 *@bobs.place.com 的东西都应该发给 Bob 等等...
这个想法是将多年来积累的大量邮件地址汇总在一起,并将它们全部作为 Bob 的一个邮箱和 Alice 的另一个邮箱。
我期望 Postfix + Dovecot + Amavis + Spamassassin + Squirrelmail 之类的东西能够满足要求,但我不确定上面的组件在哪里,Postfix 能否将其作为一组定义的正则表达式来处理,或者它是 Amavis 的工作,或者完全是其他东西?我是否需要在这个组合中使用 fetchmail,或者它的角色现在是否包含在上面其他组件之一中。
我认为它是内容过滤,但我读到的有关内容过滤的所有内容都集中在检测垃圾邮件而不是路由电子邮件。
答案1
毁灭对于这种巫术来说非常棒。
答案2
您可以从 fetchmail 将邮件输入 Postfix,然后使用其别名和虚拟地图配置 Postfix 以将其放入正确的帐户或进一步转发。
Dovecot 可以用来存储邮件并通过 IMAP 访问,但这又是一个问题。
Amavis 和 Spamassasin 不属于此范围 - Amavis 是病毒扫描程序界面,而 Spamassasin 是垃圾邮件过滤器。两者都应是您的安装的一部分,但它们不会造成您概述的问题。
答案3
我发现似乎是最简单的方法,希望这能帮助别人......
我决定先使用 fetchmail+postfix,因为我发现fetchmail 多点传送,我已经有了正确的术语来开始!
在我的 /etc/fetchmailrc 中,我有多个这样的部分,每个部分对应一个我仍在使用的电子邮件 ISP
poll [one ISP's mailserver] protocol POP3
aka [domain name this needs to pick up for from this mailserver]
aka [other domain name this needs to pick up for from this mailserver]
envelope Envelope-to
user "[my login name on mailserver]" there with password "[my password on mailserver"]
is * here
smtpaddress [ISPOne (this is appended to all emails passed on to postfix)]
这将从 ISP 获取邮件并将其发送到我的本地 postfix。
'smtpaddress' 位是最难找到的,看起来没有多少人写过关于使用它的文章。如果没有它(最终发现隐藏在 fetchmail 文档的普通视图中!),所有来自 ISP 的邮件的域名都被替换为 localhost,因此我无法对来自不同 ISP 的邮件进行不同的路由。例如,在一个域名上,我想捕获所有邮件以进行垃圾邮件处理,而在另一个域名上,我可以毫不留情地丢弃任何不需要的地址。
然后在我的 postfix 配置中,我创建 /etc/postfix/virtual-regexp ,其中包含如下行
# Main users, any mail prefixed by a local user and my choice of separator (- or _)
# is delivered to that local user
/^(alice|bob)(-.+|_.+|)@.*$/ $1@localhost
# Standard addresses routing
/^(postmaster|root|abuse)@ISPTwo$/ bob@localhost
/^(mail|sales)@ISPTwo$/ bob@localhost
# simple routing of local users without suffixes from ISPTwo
/^alice@ISPTwo$/ alice@localhost
/^bob@ISPTwo$/ bob@localhost
# fall through to catch-all while I check it
/^.*@ISPTwo$/ bob@localhost
然后运行
sudo postmap /etc/postfix/virtual-regexp
创建 /etc/postfix/virtual-regexp.db 并最后将以下行添加到 /etc/postfix/main.cf
virtual_maps = regexp:/etc/postfix/virtual-regexp
最后,重新启动/重新加载 postfix 以使用新配置。
当(不是如果!)你精心设计的正则表达式出错时,充分利用
sudo postmap -q "bob_and-alice@ISPTwo" regexp:/etc/postfix/virtual-regexp
它使用正则表达式文件中的目标路由进行回复。实际上,明智的管理员会在应用设置之前使用它来测试设置,但我直到遇到问题才发现这一点!
以上方法对我来说是有效的,邮件路由到应该去的地方,并发送到 dovecot 进行 IMAP 传送,希望它也能帮助其他人!