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

这是我第一次开始写一个更复杂的后缀,因为我讨厌设置邮件设置而不知道该怎么做。 但是现在我被要求去做。

这里的设置:

由于内部的原因,我需要我的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小提琴。