![使用 Postfix 将发往某个域的邮件转发至不同域的同一地址](https://linux22.com/image/561972/%E4%BD%BF%E7%94%A8%20Postfix%20%E5%B0%86%E5%8F%91%E5%BE%80%E6%9F%90%E4%B8%AA%E5%9F%9F%E7%9A%84%E9%82%AE%E4%BB%B6%E8%BD%AC%E5%8F%91%E8%87%B3%E4%B8%8D%E5%90%8C%E5%9F%9F%E7%9A%84%E5%90%8C%E4%B8%80%E5%9C%B0%E5%9D%80.png)
有没有办法配置 Postfix 以接受某个域的任何邮件(全部接收),然后将该电子邮件转发给不同域的同一收件人,而不管该收件人是否实际存在?
我使用 Postfix 和 MySQL 支持来管理虚拟账户。
答案1
不,这不可能直接实现。有一个例外,它是如何工作的,描述如下http://www.postfix.org/ADDRESS_REWRITING_README.html#luser_relay
另一个粗略的解决方案是使用 SQL(substr + concat)来为您处理这个问题virtual_alias_maps
。
编辑:哦。还有最后一个可能。使用策略委托机制并返回您需要的地方,如果您不想重写。REDIRECT [email protected]
DUNNO
编辑2:受到 Squidly 的启发(但他的解决方案不起作用!)你可以设置
virtual_alias_maps = pcre:/etc/postfix/forward_user.pcre, ...
并在该文件中输入
/^(.*)@adomain\.example/ $(1)@other-domain.example
(注意第一列中的转义点 (\.)。)我个人更喜欢这个版本。
答案2
我的系统上没有 pcre 表类型,因此我执行以下操作:
在
/etc/postfix/main.cf
:virtual_alias_maps = regexp:/etc/postfix/virtual
在
/etc/postfix/virtual
:/^([^@]*)@olddomain/ $(1)@newdomain
答案3
直接实现不行吗?我发现它非常简单直接,不需要 SQL、正则表达式或策略机制。
在main.cf
:
virtual_alias_domains = alias-destination1.com alias-destination2.com
virtual_alias_maps = hash:/etc/postfix/virtual
在/etc/postfix/virtual
:
# I want @true-destination.com to have two incoming aliases
@alias-destination1.com @true-destination.com
@alias-destination2.com @true-destination.com
从服务器发送测试电子邮件:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 smtp.myserver.com ESMTP Postfix
HELO smtp.myserver.com
250 smtp.myserver.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Message-ID: <[email protected]>
Date: Thu, 05 May 2011 23:59:59 -0400
From: Some Body <[email protected]>
To: [email protected]
Subject: Hello
Just testing.
.
mail.log 中的实际结果(我在端口 10025 上运行 amavis):
Apr 6 22:39:43 smtp-a postfix/smtpd[4411]: connect from localhost[127.0.0.1]
Apr 6 22:39:43 smtp-a postfix/smtpd[4411]: 6B47641AF2: client=localhost[127.0.0.1]
Apr 6 22:39:43 smtp-a postfix/cleanup[3706]: 6B47641AF2: message-id=<[email protected]>
Apr 6 22:39:43 smtp-a postfix/qmgr[3681]: 6B47641AF2: from=<[email protected]>, size=1115, nrcpt=1 (queue active)
Apr 6 22:39:43 smtp-a postfix/smtpd[4411]: disconnect from localhost[127.0.0.1]
Apr 6 22:39:43 smtp-a amavis-incoming[2159]: (02159-13) Passed CLEAN {RelayedInternal}, LOCAL [127.0.0.1]:42426 [127.0.0.1] <[email protected]> -> <[email protected]>, Queue-ID: 5C61F41AE5, Message-ID: <[email protected]>, mail_id: hUbzH1PtXlzl, Hits: 2.605, size: 394, queued_as: 6B47641AF2, 1224 ms
Apr 6 22:39:43 smtp-a postfix/lmtp[3687]: 5C61F41AE5: to=<[email protected]>, relay=127.0.0.1[127.0.0.1]:10024, delay=25, delays=24/0/0/1.2, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 6B47641AF2)
Apr 6 22:39:43 smtp-a postfix/qmgr[3681]: 5C61F41AE5: removed
为强调起见,关键行分开:
Apr 6 22:39:43 smtp-a postfix/smtp[3684]: 6B47641AF2: to=<[email protected]>, orig_to=<[email protected]>, relay=10.0.0.245[10.0.0.245]:2525, delay=0.03, delays=0.01/0/0/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 705AA40459)
Apr 6 22:39:43 smtp-a postfix/qmgr[3681]: 6B47641AF2: removed
答案4
根据您设置 Postfix 的方式,您可能能够使用别名来转发所有邮件。
编辑
您还可以设置一个重定向,它将轻松地为您完成此操作。
在 /etc/postfix/main.cf 添加以下内容:
recipient_bcc_maps = pcre:/etc/postfix/forward_bcc.pcre
然后在 /etc/postfix/forward_bcc.pcre 添加以下内容:
/^[email protected]/ [email protected]
这有点像黑客行为,但它可以用于将特定用户从一个域转发到另一个域。
您可能还想看看这有关如何在 Postfix 内部进行一些重写的页面。