![如何转发和自动回复收到的电子邮件?](https://linux22.com/image/544779/%E5%A6%82%E4%BD%95%E8%BD%AC%E5%8F%91%E5%92%8C%E8%87%AA%E5%8A%A8%E5%9B%9E%E5%A4%8D%E6%94%B6%E5%88%B0%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%EF%BC%9F.png)
我们公司刚刚切换到了一个新的电子邮件域,并希望保留旧域一年,因为他们会通知所有人有关更改的信息。旧电子邮件域在 Exchange 2007 上,新电子邮件域在 Google Apps 上。每个人都 100% 使用 Google Apps,而 Exchange 服务器只是转发电子邮件。
我想用基于 Postfix 或其他电子邮件服务器的轻量级服务器替换 Exchange 服务器(它功能不足,而且仅仅转发电子邮件会浪费资源)。它需要执行以下操作:
- 将发送至 old_domain.com 的电子邮件转发至 new_domain.com
- 自动回复发件人,告知所有人的电子邮件已更改为 new_domain.com
Postfix 能做到这一点吗?有人有关于如何做到这一点的文档吗?我对 Linux 的了解足以让我感到危险,因此在提出这个建议之前,我想先确定一下。
答案1
我猜你想伪造旧域名上的退回邮件。我使用 Exim,他们有一个控件可以做到这一点。
您还需要一条清晰的退回消息,表明该电子邮件已被接受投递,但以后的消息应发送到新的地址。
Exim 还允许在别名文件中自定义退回消息。这可用于指定新地址。
Postfix 或 exchange 可能具有类似的功能。
编辑:Exim 文档非常好。有关您的问题的详细信息,请参阅规范第 40 章(访问控制列表)和第 11 章(字符串扩展)。
您可以尝试在收件人 ACL 中添加如下条目:
warn
domains = old.example.com
control == fakereject/User ${local_part}@old.example.com has moved \
${local_part}@new.example.net\n\
Your message has been forwarded to their new address.
重定向到新服务器可以通过单独的别名、重定向路由器(参见第 22 章第 3 节)或重写规则(参见第 31 章地址重写)来完成,例如:
*@old.example.com [email protected] T
答案2
我会使用 Postfix 和 Cyrus-Imapd 来实现这一点。Postfix 会将所有内容转发给 cyrus-imapd,然后您可以使用 Sieve 过滤器来执行以下操作:
- 将电子邮件转发给新收件人
- 向发件人发送通知
从我的想法来看,我认为你可以这样做:
if header :contains "to" "user@old_domain.com" {
redirect "user@new_domain.com";
reject "old_domain.com is not used anymore, please send your emails to new_domain.com";
}
困难在于 Sieve 规则是针对每个用户定义的,因此您需要为每个用户创建一组规则。但您可以轻松地编写脚本。
关于 Cyrus-Imapd 中的 Sieve 的更多信息可以在这里找到: http://wiki.linuxwall.info/doku.php/en:ressources:astuces:sieve
答案3
我不确定 Google Apps 是否可以做到这一点,但我对“普通”邮件服务器的操作是让它也处理旧域的邮件,将旧域的 MX 指向新服务器,然后相应地配置 MTA。
答案4
Postfix 可以轻松做到这一点(大约 7 年前我们在 Postfix 中做过类似的事情,所以我不再能够使用我们编写的非常简单的过滤器)。
我建议使用自动回复器(见http://www.postfix.org/addon.html(见几个例子)来生成自动回复,这样您就可以避免自动回复生成器中的所有陷阱。
然后,一个简单的过滤器(参见http://www.postfix.org/SMTPD_PROXY_README.html有关如何实现自动转发器的队列前过滤器来更改目的地的信息,请参见自动转发器。