Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 后缀传输映射和虚拟邮箱_Linux_Pipe_Postfix Mta_Mail Server - Fatal编程技术网

Linux 后缀传输映射和虚拟邮箱

Linux 后缀传输映射和虚拟邮箱,linux,pipe,postfix-mta,mail-server,Linux,Pipe,Postfix Mta,Mail Server,我试图通过管道将一个特定地址传输到php脚本,但似乎我的传输映射没有触发,而是使用了虚拟传输。以下是我所拥有的: @example.com列在虚拟邮箱域中,向虚拟邮箱的传递工作正常 但我需要为您转发所有邮件foo@example.com不是到dovecot lda(在虚拟_传输中指定),而是到另一个服务 这是我的虚拟传输交付方法: 多佛科特unix-n--管道 flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot lda-f${sen

我试图通过管道将一个特定地址传输到php脚本,但似乎我的传输映射没有触发,而是使用了虚拟传输。以下是我所拥有的:

@example.com列在虚拟邮箱域中,向虚拟邮箱的传递工作正常

但我需要为您转发所有邮件foo@example.com不是到dovecot lda(在虚拟_传输中指定),而是到另一个服务

这是我的虚拟传输交付方法:

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

这就是我想用管道输送所有信息的地方foo@example.com

php_脚本unix-n--pipe flags=Fq user=www-data-argv=/home/script.php

postconf-n

别名\数据库=散列:/etc/别名
别名\u映射=哈希:/etc/别名
追加\u dot\u mydomain=no
biff=否
config_directory=/etc/postfix
多佛科特目的地收件人限额=1
邮箱大小限制=0
milter\U default\U action=接受
milter_协议=2
mydestination=localhost
myhostname=localhost
mynetworks=127.0.0.0/8[::ffff:127.0.0.0]/104[::1]/128
myorigin=/etc/mailname
非smtpd milters=net:localhost:12301
自述文件目录=否
收件人\分隔符=+
relayhost=
smtp_tls_session_cache_database=btree:${data_directory}/smtp_scache
smtpd_banner=$myhostname ESMTP$mail_名称(Debian/GNU)
smtpd_milters=inet:localhost:12301
smtpd_收件人_限制=
smtpd\u中继\u限制=许可证\u sasl\u认证许可证\u我的网络
延迟\u未经授权\u目的地 smtpd_sasl_auth_enable=是
smtpd_sasl_path=private/auth
smtpd_sasl_类型=多夫科特
smtpd\U tls\U auth\U only=是
smtpd_tls_cert_file=/etc/ssl/certs/mailserver.pem
smtpd_tls_key_file=/etc/ssl/private/mailserver.pem
smtpd\U tls\U安全级别=可能
smtpd_tls_session_cache_database=btree:${data_directory}/smtpd_scache
smtpd\U use\U tls=是
传输映射=散列:/etc/postfix/transport
虚拟别名映射=mysql:/etc/postfix/mysql虚拟别名映射。cf
virtual\u mailbox\u domains=mysql:/etc/postfix/mysql virtual mailbox-
domains.cf 虚拟邮箱映射=mysql:/etc/postfix/mysql虚拟邮箱映射。cf
虚拟运输=多夫科特

in/etc/postfix/transport foo@example.comphp_脚本

似乎后缀只是忽略了传输映射,我总是在虚拟邮箱表中获取未知用户。这是正确的,没有这样的用户,但是我想在检查是否有虚拟用户之前通过transport_maps转发邮件

有人能帮忙吗?花两天时间搜索、阅读和尝试,但似乎都不起作用。

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


似乎postfix不能同时使用虚拟传输和传输映射,所以我用虚拟别名创建了转发到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}
# vi /etc/postfix/redirect_map
plup@dummy.happy-dev.fr   dummy-redirect

# postmap /etc/postfix/redirect_map
有关脚本参数,请参见[1]

添加映射以触发传输:

# vi /etc/postfix/master.cf
dummy-redirect unix -   n       n       -       50      pipe
    user=vmail argv=/opt/postfix-scripts/redirect.py
    ${sender} ${recipient}
# 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\u 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
在此之后,我可以使用

带有虚拟邮箱的后缀传输映射

###### 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  
...

干得好。你应该接受你自己的答案。你让我成功了。这种说法是不正确的。我在尝试时发现了这一点。实际上是
虚拟邮箱地图
设置阻止postfix查阅
传输地图
设置。