如果收件人不在别名映射中,则将电子邮件转发到其他服务器

如果收件人不在别名映射中,则将电子邮件转发到其他服务器

这是我第一次开始编写更复杂的后缀,因为我讨厌在不知道该做什么的情况下设置邮件设置。但现在我必须这样做。

这里的设置:

由于内部原因,我需要像这样设置我的 postfix 中继:

如果电子邮件的收件人不存在于别名映射中但收件人域存在,则 Postfix 会将其发送到真实的邮件服务器。

好吧,这读起来很奇怪,但我给你举了一个例子。

example.com 的 MX 记录设置为 ProxyHost,但所有帐户的真实邮件服务器均可通过 external.example.com 访问

在 mysql 中我已经设置[电子邮件保护]应转发至[电子邮件保护]。现在就可以正常工作。

但如果我发送邮件到[电子邮件保护]在哪里任何不在本地 mysql 转发表中,但正如你所见示例.com是,我希望将邮件转发到真正的邮件服务器。此真实服务器信息位于域表在里面realmx 列

这对我来说似乎不太难,但我无法处理。目前所有邮件[电子邮件保护]都被拒绝了。

答案1

这是一个非常标准和典型的设置。Postfix 在面向外部的服务器上运行,接收邮件并将其传递给拥有邮箱的服务器:

world -> smtp.example.com -> imap.example.com

在您的smtp服务器上(您可以这样称呼它ProxyHost,但我不会使用这个术语,因为它实际上并不是该术语的一般用法中的代理),您将使用如下配置(您必须根据您的具体情况进行调整,这些是一般准则):

mydestination = localhost
transport_maps = hash:/etc/postfix/transport
relay_domains = example.com
relay_recipient_maps = hash:/etc/postfix/relay_recipients

/etc/postfix/relay_recipients 将包含有效收件人的列表。

/etc/postfix/transport 将列出邮件的最终目的地。

上述每个配置的完整文档和完整解释都可以在出色的 Postfix 手册中找到。首先从中继域文档。

答案2

警告:未经测试的查询|未经测试的设置。
因为您只提供了有关设置的少量信息,所以我假设您通过设置了别名virtual_alias_maps

第一个问题避免被拒绝。解决方案是relay_domains使用 mysql 映射定义

relay_domains = mysql:/etc/postfix/relay_domains

查询部分是

SELECT 1 FROM forwarding WHERE email LIKE '%%@%s' LIMIT 1;

第二个问题是将电子邮件重定向到realmx解决方案是transport_maps使用 mysql 映射定义连接转发和域表

relay_domains = mysql:/etc/postfix/relay_domains

查询部分是

SELECT domain.realmx FROM domain INNER JOIN forwarding ON email LIKE CONCAT ('%',domain.domain) WHERE domain.domain = '%d' LIMIT 1;

SQL 小提琴。

相关内容