我有一台使用 Postfix 收发电子邮件的 Linux 服务器。它使用动态 IP,因此我使用“relayhost”参数通过 ssh 隧道将外发邮件发送到另一台使用静态 IP 的服务器,然后从那里发往现实世界。自 1998 年左右以来,它一直运行良好。
我目前正在为客户开发一些软件,该软件根据数据库中的信息向客户组织中的各种人员发送电子邮件。在最初的测试中,我创建了假人,他们的电子邮件地址都是 ptomblin+client1@{mydomain}.com,这很有效,所有电子邮件都发送给了我。但现在我正在使用实时数据库,所有电子邮件地址都是客户组织中真实的人。我并不特别想向这些人发送电子邮件,告诉他们他们请求的系统访问权限已配置,所以我想找到一种方法,将所有发送到该客户域的电子邮件重定向到我的电子邮件地址或文件。
答案1
如果我理解正确的话,您希望所有发往 example.com 的邮件都发送到您的邮件地址或文件,而不是转发到 Relayhost 中指定的服务器:
步骤1:在 main.cf 中添加 example.com,mydestination
以便发往 example.com 的邮件在本地传递。
第2步:为 example.com 设置一个 catchall,并将所有电子邮件发送到您的邮件地址或文件。例如,您可以使用 postfix pcre 来实现这一点。
扩展步骤 2
使用 postfix pcre 只是实现此目的的众多方法之一。据请参阅 Garisson 的本教程:
- 创建本地用户 mylocaluser 及其邮箱或 maildir
创建一个名为 aliases-pcre 的文件,内容如下:
/@example\\.com$/ mylocaluser
将以下行添加到 main.cf(如果 main.cf 位于 /etc/postfix 中):
alias_database = hash:/etc/postfix/aliases alias_maps = hash:/etc/postfix/aliases, pcre:/etc/postfix/aliases-pcre
重启 postfix
现在,所有发往 *@example.com 的邮件都应发送至 mylocaluser mailbox/maildir。
再次强调,这只是一个例子。您可以使用任何其他最适合您需求的方法。我倾向于使用 pcre,因为它允许使用稍微复杂一点的正则表达式。
但是,由于您需要虚拟域,因此上述方法不起作用。
这是一个最小的示例配置:
(main.cf)
alias_database = hash:/etc/aliases
local_recipient_maps =
relayhost = myotherserver.example.com
virtual_alias_maps = pcre:/etc/postfix/aliases-pcre
virtual_alias_domains = example.com
mydestination = localhost
文件/etc/postfix/aliases-pcre
/@example\.com$/ somelocaluser
答案2
好的,Eric 让我走上了正确的道路,但还不够。我做了以下事情:
在 /etc/postfix/main.cf 中:
virtual_alias_domains = example.com virtual_alias_maps = regexp:/etc/postfix/virtual_alias
在 /etc/postfix/virtual_alias 中
/@example\.com/ ptomblin
再过一会儿postfix reload
,我就去参加比赛了。(顺便说一句,你不需要postmap
对正则表达式文件进行操作,只需要哈希文件)