0

我正在尝试使用 procmail 将电子邮件发送到 PHP 脚本,因此该脚本将检查 MySQL 数据库并根据发件人电子邮件编辑主题行。我相信我有一个有效的 procmail 可以做到这一点:

:0:
* ^To:.*@barrett.com
! '/usr/local/bin/php-5.2 -f $HOME/ticket/emailcustcheck.php'

但是,我不确定 procmail 是如何执行命令的。电子邮件如何传递给 PHP 脚本,因此,我如何在脚本中引用它?

4

2 回答 2

0

管道到脚本的正确语法是

:0   # no lock file
* ^To:.*@barrett\.com
| /usr/local/bin/php-5.2 -f $HOME/ticket/emailcustcheck.php  # no quotes, use pipe

!操作将尝试转发到电子邮件地址,但当然,带有 PHP 解释器路径的长引号字符串不是有效的电子邮件地址。

如果你需要加锁(即不允许这个PHP脚本的两个实例同时运行),你需要命名一个锁文件;Procmail 无法在此处推断锁定文件名,因此您所做的锁定操作无论如何只会产生错误消息。如果您不确定,添加命名锁定文件是更安全的选择,但如果您没有并发问题(例如,脚本需要写入数据库而没有其他进程正在使用数据库),则不需要,并且可能会减慢处理速度。

条件正则表达式看起来也有些不精确,但我只能推测您可能希望在Ccmail 和 direct上触发To:。如果是这样,请在文档中查找^TO_宏。

脚本将消息作为其标准输入;它可能应该将所有输入行读取到一个数组中,或者拆分为两个数组,以便第一个空行之前的所有内容都进入“headers”数组,其余的进入“body”数组。或者也许 PHP 有一些类可以将电子邮件消息从标准输入读取到对象中。

于 2012-12-10T09:26:45.110 回答
0
:0 wf
* ^To:.*@barrett\.com
| /usr/local/bin/php-5.2 -f $HOME/ticket/emailcustcheck.php

f告诉 procmail 您将过滤消息,即更改它。w 等待过滤器或程序完成并检查其退出代码。

如果您只想处理邮件正文,则必须添加标志b 如果您只想处理邮件标题,则必须添加标志h

于 2013-06-05T14:24:06.483 回答