这是我第一次开始编写更复杂的后缀,因为我讨厌在不知道该做什么的情况下设置邮件设置。但现在我必须这样做。
这里的设置:
由于内部原因,我需要像这样设置我的 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;