这是我第一次开始写一个更复杂的后缀,因为我讨厌设置邮件设置而不知道该怎么做。 但是现在我被要求去做。
这里的设置:
由于内部的原因,我需要我的postfix中继这样设置:
如果电子邮件的收件人不在别名地图中,但是收件人域名不存在,则postfix会将其发送到真正的邮件服务器。
好吧,这听起来很奇怪,但我给你一个例子。
example.com的MXlogging被设置为ProxyHost,但是所有帐户的真实邮件服务器都可以在external.example.com下访问
在MySQL中,我已经设置[email protected]应该被转发到[email protected]。 这正在工作。
但是,如果我发送邮件到[email protected] ,而不是在本地的mysql转发表中,但你可以看到example.com ,我很乐意将邮件转发到真正的邮件服务器。 这个真实的服务器信息位于realmx列的域表中。
这对我来说并不难,但我无法处理。 现在所有邮件[email protected]只是被拒绝。
这是一个非常标准和典型的设置。 Postfix运行在一个面向外部的服务器上,接收邮件并将其传递到具有该邮箱的服务器上:
world -> smtp.example.com -> imap.example.com
在你的smtp服务器上(你称之为ProxyHost但是我不会使用这个术语,因为它在这个术语的一般用法中并不是真正的代理),你将使用下面的configuration(你必须根据你的具体情况进行调整,这些是一般的指导方针):
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将列出邮件最终目的地的目的地。
完整的文档和上述每个configuration的完整解释可以在Postfix手册中find。 从relay_domains文档开始。
警告:未经testing的查询| 未经testing的设置。
因为你只给了你的设置很less的信息,所以我假设你通过virtual_alias_maps设置别名。
第一个问题是避免被拒绝。 解决scheme是用mysql映射定义relay_domains
relay_domains = mysql:/etc/postfix/relay_domains
与查询部分是
SELECT 1 FROM forwarding WHERE email LIKE '%%@%s' LIMIT 1;
第二个问题是将电子邮件redirect到realmx 。 解决scheme是定义transport_maps与mysql地图join转发和域表
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小提琴。