我的域example.com中的 MX 服务器指向我的 Postfix 服务器。不过,我还配置了一个负责example.com电子邮件的 Google Apps 帐户。
我希望所有电子邮件都转到我的 Postfix 服务器(这已通过 DNS 区域中的 MX 设置完成),但希望将此域的某些用户转发到 MX aspmx.l.google.com。
我使用 Transport_maps 参数做到了这一点。这是文件/etc/postfix/transport。
test@example.com smtp:[aspmx.l.google.com]
问题是,smtpd_reject_unlisted_recipient默认设置为yes ,但 postfix 在应用传输映射之前会检查用户是否存在。我的 Postfix 服务器不知道该域的用户测试,因此它只是拒绝电子邮件。
我希望在收件人存在检查之前进行传输路由(在我当前的设置中,只有 Google SMTP 知道用户test的存在)。那可能吗?
注意:local_recipient_maps 对我不起作用,因为我使用带有 dovecot 的虚拟传输。所以收件人表是virtual_mailbox_maps。
为什么路由不在收件人存在检查之前发生?难道就没有办法了吗?当我路由电子邮件时,我的意思是“当前的 Postfix 不处理任何事情,只是将电子邮件转发到另一台完全负责配置的服务器”。
不,这不是 postfix 的工作方式。收件人存在检查和电子邮件路由是 postfix 的两项不同活动。接受电子邮件时执行收件人存在检查。执行它的进程是smtpd。发送电子邮件时执行电子邮件路由。执行它的过程是微不足道的重写
在评论中,您提到您使用虚拟投递代理从 postfix来投递电子邮件。我要告诉你,在后缀配置中实现无冗余信息是可能的。但您必须更改当前的后缀设置。
为了实现你的目标,我们必须将virtual_mailbox_domain
课堂上的所有领域转移到relay_domains
课堂上。然后使用 dovecot LDA 将电子邮件发送到正确的邮箱中。中继域类有一个名为“relay_recipient_maps”的特殊参数来检查收件人是否存在。
好消息是您可以relay_recipient_maps
与 一起使用transport_maps
。为什么?因为relay_recipient_maps仅用于检查用户是否存在。检查收件人是否存在时,transport_maps 中的值/右侧字符串被忽略。来自man postconf的片段。
可选查找表,其中包含与 $relay_domains 匹配的域中的所有有效地址。将 @domain 指定为没有有效收件人列表的域的通配符,并成为反向散射邮件的来源:Postfix 接受不存在收件人的垃圾邮件,然后向无辜者发送无法投递的邮件。从技术上讲,用 $relay_recipient_maps 列出的表用作列表:Postfix 仅需要知道是否找到查找字符串,但它不使用表查找的结果。
为了完整起见,这里是此设置的后缀配置。这个想法归功于sebokopter。
#main.cf
# rename virtual_mailbox_domains to relay_domains
relay_domains = mydomain.example.com
# put the parameter value of virtual_mailbox_maps AND transport_maps parameter
relay_recipient_maps = hash:/my/virtual_mailbox_maps, hash:/my/transport_maps
transport_maps = hash:/my/transport_maps
relay_transport = dovecot:
#master.cf
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5867 次 |
最近记录: |