我有一个 Postfix 设置,虚拟用户运行得很好。我的一些用户将他们的电子邮件重定向到外部电子邮件 gmail 帐户,例如:为了方便起见,通过[email protected]
转发到。[email protected]
virtual_alias_maps
现在我尝试使用transport_maps
专门的传输来进行这些转发,如下所示:
主要.cf:
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-mailbox-maps.cf
default_transport = out-default
transport_maps = mysql:/etc/postfix/virtual/mysql-transport-maps.cf
master.cf:
out-default unix - - n - - smtp
-o proxy_interfaces=$smtp_default_transport_proxy_interface
-o smtp_bind_address=$smtp_default_transport_interfaces
-o inet_interfaces=$smtp_default_transport_interfaces
-o myhostname=$smtp_default_transport_hostname
-o smtp_helo_name=$smtp_default_transport_hostname
-o syslog_name=smtp-$smtp_default_transport_hostname
out-fwd unix - - n - - smtp
-o proxy_interfaces=$smtp_default_transport_proxy_interface
-o smtp_bind_address=$smtp_default_transport_interfaces
-o inet_interfaces=$smtp_default_transport_interfaces
-o myhostname=$smtp_default_transport_hostname
-o smtp_helo_name=$smtp_default_transport_hostname
-o syslog_name=smtp-fwd-$smtp_default_transport_hostname
-o bounce_queue_lifetime=0
-o maximal_queue_lifetime=0
mysql-alias-maps.cf:
query = SELECT destination FROM `aliases` WHERE source='%s'
mysql-transport-maps.cf:
query = SELECT IF (ISNULL(destination), NULL, 'out-fwd') as transport \
FROM `aliases` \
WHERE destination='%s' \
AND destination LIKE '%%@gmail.com'
我想要实现的是“如果用户将电子邮件转发到@gmail,则会减少队列生命周期。”
现在,当我尝试向这些用户发送电子邮件时,会发生以下情况:
postfix/qmgr[28839]: warning: connect to transport private/out-fwd,out-fwd: No such file or directory
私人/外转,外转>为什么它重复运输的名称?
如果我将查询更改为 return out-fwd:
(末尾冒号),我会得到:
smtp-fwd-xxxx/smtp[23429]: fatal: valid hostname or network address required in server description: ,out-fwd:
,out-fwd: ???为什么?
请注意,如果我只是评论,则transport_maps
电子邮件会使用default_transport = out-default
很好的方式发送。
谢谢。
答案1
我发现了这个问题,这是我的问题。如果有多个本地帐户转发/别名到同一个外部 gmail 帐户,并且由于某种原因 Postfix 会连接结果,上面的查询将返回多个结果。
query = SELECT IF (ISNULL(destination), NULL, 'out-fwd') as transport \
FROM `aliases` \
WHERE destination='%s' \
AND destination LIKE '%%@gmail.com' \
LIMIT 1
添加LIMIT
修复了问题。