我正在尝试为共享域设置邮件服务器:一半的邮箱托管在 Gmail 上,另一半托管在本地服务器上。
我安装了 iRedMail 1.6.0 并配置 Gmail 将所有未解析的 @example.com 用户发送到本地服务器。当发件人不是 @example.com 时,它可以工作……如果是,邮件会因为未经身份验证的连接而被拒绝。将所有 gmail 子网添加到 mynetworks(在 main.cf 和 settings.py 中)解决了这个问题(还有更好的解决方案吗?)。
真正的问题是当邮箱远程托管时,邮件会从本地后缀退出。
我不得不使用远程邮箱列表创建一个虚拟邮箱映射(糟糕的解决方案)来绕过“rcpt to:”命令。但过了一会儿,我还是收到了无法送达的报告:
操作:失败状态:5.1.1 诊断代码:x-unix;用户未知
经过一番努力,我发现添加一个与虚拟邮箱地图数据大致相同的传输图(在传输图中我也有本地传输规则)可以使问题消失并且邮件可以正确流动。
现在,为同一项工作使用 2 个不同的地址列表就更糟糕了。我正在寻找一个更优雅的解决方案,例如“将任何未解析的 @example.com 电子邮件转发到...”,就像我在 Gmail 上所做的那样。有什么建议吗?
谢谢 Dario
答案1
如果您将域配置为当地的本地域名(不虚拟的),您可以尝试使用fallback_transport
或fallback_transport_maps
。像这样设置(在 中main.cf
):
fallback_transport = smtp:gmail.com
(它将对 gmail.com 进行 MX 查找并使用该查找的结果;我假设您在 Gmail 上托管的域名的 MX 服务器列表和 gmail.com 地址的 MX 服务器列表是相同的)。请考虑阅读人 5 运输如果您想进一步探索其右侧格式。
您的想法是“将所有未解析的邮件发送到 Gmail”在本地端,将“所有未解析的邮件发送到本地”在 Gmail 端,这种想法非常糟糕。如果某些邮件在双方都未得到解决,它将无限期地反复发送,最终您的服务器将在 Gmail 上被禁止。为了避免这种情况,您必须维护两个列表:在 Gmail 上,您需要知道本地邮件地址的确切列表,在本地,您需要知道 Gmail 上邮件地址的确切列表。使用fallback_transport_maps
方式是,对于已知的远程邮箱,它将返回与我之前建议的相同的结果,而对于未知的远程邮箱,它将不返回任何结果,从而使 Postfix 尽早拒绝邮件。您应该始终尽早拒绝,这是电子邮件的优点。出于类似的原因,最好让 Gmail 也只转发您本地实际拥有的邮件。不要抱怨,这就是进行这种设置的代价。
如果你有一个虚拟的设置,您可以尝试将其用于transport_maps
此目的,但应非常谨慎地进行。不要创建开放中继。
此解决方案的另一个问题是,您的某些发件人可能具有限制性 DMARC 策略(即好的,我希望更多的发件人这样做——互联网上的垃圾邮件会少得多)。他们不太可能将您的服务器列为允许在 SPF 记录中代表他们发送邮件的服务器,因此如果此类邮件进入您的服务器并决定将其重定向到 Gmail,Gmail将要拒绝它,你就什么也做不了了,就这样。据我所知,这是无法解决的。