后缀 transport_maps 和 virtual_mailbox

Postfix transport_maps and virtual_mailbox

我正在尝试将一个特定地址传送到 php 脚本,但似乎我的 transport_maps 没有触发,而是使用了 virtual_transport。这是我拥有的:

@example.com 列在 virtual_mailbox_domains 中,投递到虚拟邮箱工作正常。

但我需要将 foo@example.com 的所有消息转发到另一个服务而不是 dovecot-lda(在 virtual_transport 中指定)。

这是我virtual_transport的送货方式:

dovecot unix - n n - - 管道 flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

这就是我要通过管道传输所有 foo@example.com

的地方

php_script unix - n n - - 管道 flags=Fq user=www-data argv=/home/script.php

postconf -n

alias_database = 散列:/etc/aliases
alias_maps = 散列:/etc/aliases
append_dot_mydomain = 没有
biff = 否
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
mailbox_size_limit = 0
milter_default_action = 接受
milter_protocol = 2
我的目的地=本地主机
我的主机名 = 本地主机
我的网络 = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
non_smtpd_milters = net:localhost:12301
readme_directory = 没有
recipient_delimiter = +
中继主机=
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_milters=我net:localhost:12301
smtpd_recipient_restrictions =
smtpd_relay_restrictions = permit_sasl_authenticated permit_mynetworks
defer_unauth_destination smtpd_sasl_auth_enable = 是
smtpd_sasl_path = private/auth
smtpd_sasl_type = 鸽舍
smtpd_tls_auth_only = 是
smtpd_tls_cert_file = /etc/ssl/certs/mailserver.pem
smtpd_tls_key_file = /etc/ssl/private/mailserver.pem
smtpd_tls_security_level = 可能
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = 是
transport_maps = 散列:/etc/postfix/传输
virtual_alias_maps = mysql:/etc/postfix/mysql-虚拟别名-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-虚拟邮箱-
domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-虚拟邮箱-maps.cf
virtual_transport = 鸽舍

在/etc/postfix/运输 foo@example.com php_script

似乎后缀只是忽略了transport_map,我在虚拟邮箱中总是得到用户未知table。这是正确的没有这样的用户,但我想通过transport_maps转发邮件,然后再检查是否有虚拟用户。

有人能帮忙吗?花了两天时间搜索,阅读 man 并尝试但似乎它只是行不通。

好的,我得到了解决方案:

似乎 postfix 不适用于 virtual_transport 和 transport_maps 所以我在 virual_aliases 中创建了转发到 foo@localhost 然后我使用 transport_maps文件到管道 foo@localhost 到脚本:)

我的解决方案,记录在案,

创建特定传输:

# vi /etc/postfix/master.cf
dummy-redirect unix -   n       n       -       50      pipe
    user=vmail argv=/opt/postfix-scripts/redirect.py
    ${sender} ${recipient}

有关脚本参数,请参阅 [http://www.postfix.org/pipe.8.html]

添加地图以触发运输:

# vi /etc/postfix/redirect_map
plup@dummy.happy-dev.fr   dummy-redirect

# postmap /etc/postfix/redirect_map

配置域和传输映射:

# vi /etc/postfix/main.cf
virtual_mailbox_domains = dummy.happy-dev.fr
virtual_transport = discard
transport_maps = hash:/etc/postfix/redirect_map

在我的例子中virtual_transport = discard 替换默认配置以保持一致。

# service postfix reload

# postconf -d mail_version
mail_version = 2.11.3

是的,丹尼尔说得对 ->

It seems postfix does not work with both virtual_transport and transport_maps

但就我而言,我禁用了

#virtual_transport = lmtp:unix:private/dovecot-lmtp

在main.cf

并在/etc/postfix/transport文件中添加

my-domain1.com      lmtp:unix:private/dovecot-lmtp
my-domain2.com      lmtp:unix:private/dovecot-lmtp
my-domain3.com      lmtp:unix:private/dovecot-lmtp

之后我可以使用

后缀 transport_maps 与 virtual_mailbox

###### MySQL Connection ######
virtual_alias_maps = mysql:/etc/postfix/sql/aliases.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/accounts.cf
virtual_mailbox_domains = mysql:/etc/postfix/sql/domains.cf
local_recipient_maps = $virtual_mailbox_maps  
...