我目前已将 Postfix 管道插入 PHP 脚本以通过别名处理电子邮件。
catchall: |/var/www/vhosts/website/httpdocs/scripts/incoming_mail.php
但是,我希望使用我的 CI 项目中提供的 DB 配置等,因此我需要提供一条路由,例如:
catchall: |/var/www/vhosts/website/httpdocs/cli.php /incoming_mail
期望的结果是我运行incoming_mail 控制器。
如果我尝试上述操作,电子邮件将被退回,并显示以下内容:
Action: failed
Status: 5.2.0
Diagnostic-Code: X-Postfix; cannot append message to file /incoming_mail:
cannot create file exclusively: Permission denied
任何帮助是极大的赞赏!
答案1
无法将消息附加到文件 /incoming_mail:无法独占创建文件:权限被拒绝
上述错误消息是由 Postfix 引发的,因为您告诉它将电子邮件内容附加到/incoming_mail
,而不是将参数传递 /incoming_mail
给cli.php
。
根据man 5 别名
|命令
邮件通过管道传输到命令中。包含特殊字符(如空格)的命令应括在双引号中。有关传递到命令的详细信息,请参阅 local(8)。
由于您没有包装包含空格的命令,因此后缀被解释/incoming_mail
为文件名
/文件名
邮件将附加到 /file/name。有关传递到文件的详细信息,请参阅 local(8)。传递不仅限于常规文件。例如,要处理不需要的邮件,请将其转移到 /dev/null。
解决方案:用双引号将命令括在别名文件中
catchall: "|/var/www/vhosts/website/httpdocs/cli.php /incoming_mail"
附言:Jommaar 解决方案使用transport_maps
,pipe
也可以使用:)
答案2
你好,这是我制作解析器的方法:
/etc/postfix/master.cf
(后缀)
bounce-pipe unix - n n - - pipe
flags=BDFORXhqu user=deploy argv=/usr/bin/php5 /var/www/emailmanager/public/index.php
运输(后缀)
[email protected] bounce-pipe:
index.php-获取您要处理的数据
$data = file_get_contents('php://stdin');