【问题标题】:How do I use Procmail with PHP?如何将 Procmail 与 PHP 一起使用?
【发布时间】:2012-12-06 21:21:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: procmail


    【解决方案1】:

    管道到脚本的正确语法是

    :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 有一些类可以将电子邮件消息从标准输入读取到对象中。

    【讨论】:

      【解决方案2】:
      :0 wf
      * ^To:.*@barrett\.com
      | /usr/local/bin/php-5.2 -f $HOME/ticket/emailcustcheck.php
      

      f 告诉procmail 你要过滤邮件,即改变它。 w 等待过滤器或程序完成并检查其退出代码。

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

      【讨论】:

        猜你喜欢
        • 2014-02-17
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 2013-04-05
        • 2011-06-18
        • 2019-11-08
        • 2014-01-02
        相关资源
        最近更新 更多