如何在PHP中使用Procmail?

时间:2012-12-06 21:21:22

标签: procmail

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

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

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

2 个答案:

答案 0 :(得分: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无法在此处推断锁定文件名,因此您的锁定操作无论如何都只会产生错误消息。如果您不确定,添加命名锁定文件是更安全的选择,但如果您没有并发问题(例如,脚本需要写入数据库而其他进程没有使用数据库)则不需要,可能会减慢处理速度。

条件正则表达式看起来有点不精确,但我只能推测您可能想要在Cc邮件上触发以及直接To:。如果是,请在文档中查找^TO_宏。

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

答案 1 :(得分:0)

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

f 告诉procmail您要过滤消息,即更改消息。 w 等待过滤器或程序完成并检查其exitcode。

如果您只想在邮件正文上工作,则必须添加标记 b 如果您只想在邮件标题上工作,则必须添加标记 h