首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用procmail调用php脚本

使用procmail调用php脚本
EN

Stack Overflow用户
提问于 2011-06-17 01:43:16
回答 3查看 4.2K关注 0票数 2

我正在尝试做一些自定义的电子邮件转发。#1我在一个共享服务器上,它使用qmail,也可以使用procmail。

我正在尝试完成的是一些自定义的电子邮件转发一个地址,根据时间表。例如,我有一个每个工作日工作的员工的日程表,我有一个php脚本,它随机选择今天工作的员工的电子邮件地址。

因此,我尝试调用procmail中脚本,并在转发行中输出结果(这是一个电子邮件地址):

示例:

代码语言:javascript
复制
#Something
LOGFILE=/usr/home/myname/procmail-log
VERBOSE=yes
EXITCODE=99
MAILDIR=/usr/boxes/myname
DEFAULT=/usr/boxes/myname/mybox
SHELL=/bin/sh
MYVAR=$(php -q /usr/home/myname/testemail/emailtester.php)

:0
! $MYVAR

这不管用。完全没有。我也尝试过:

代码语言:javascript
复制
MYVAR=`php /usr/home/myname/testemail/emailtester.php`

就像把它放在前线上一样:

代码语言:javascript
复制
:0
! |php /usr/home/myname/testemail/emailtester.php

我完全不适应这里的环境...我甚至尝试不使用procmail,我只是将整个电子邮件从qmail传输到一个php脚本。我需要保持报头的完好无损,就像普通的转发一样,这在PHP中被证明是困难的,而且有点超出了我的范围。(我设法创建了一个无限的电子邮件循环)所以,我宁愿不再尝试这样做。

我可以尝试用perl编写脚本,我从未使用过perl,但我需要从web界面管理这个时间表,或者至少以用户友好的方式。

在这一点上,任何帮助或建议都将不胜感激,谢谢

编辑:

好吧,因为我不能把代码放在注释中,所以我就在这里编辑。

现在在我的日志中记录如下内容:

代码语言:javascript
复制
Folder: /usr/local/bin/php /usr/home/idnani/testemail/emailtester.ph     1679
"rocmail: Executing "/usr/local/bin/php,/usr/home/idnani/testemail/emailtester.php
Could not open input file: /usr/home/idnani/testemail/emailtester.php

当我与:0fw一起使用时,我得到:

代码语言:javascript
复制
"rocmail: Executing "/usr/local/bin/php,/usr/home/idnani/testemail/emailtester.php
Could not open input file: /usr/home/idnani/testemail/emailtester.php
procmail: [69907] Thu Jun 16 14:04:17 2011
procmail: Program failure (1) of "/usr/local/bin/php"
procmail: Rescue of unfiltered data succeeded

编辑:弄清楚了!

经过多次尝试和错误,找到了正确的方法。

根本不要使用管道,而且你确实需要!正向符号:

最终规则:

代码语言:javascript
复制
:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

如此简单..。我有点生气,我花了几个小时才弄明白这个问题,谢谢大家帮我指明了正确的方向!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-29 00:07:01

经过多次尝试和错误,找到了正确的方法。

根本不要使用管道,而且你确实需要!正向符号:

这条规则所做的就是向php脚本询问一封电子邮件,然后转发到该电子邮件。最终规则:

代码语言:javascript
复制
:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

如此简单..。我有点生气,我花了几个小时才弄明白这个问题,谢谢大家帮我指明了正确的方向!

Michael的回答看起来应该行得通,也许在不同的情况下行得通?我不能得到它,这就是为什么我自己回答这个问题..

新编辑:

注意:您仍然可以通过STDIN在php中检索整个电子邮件

注意:您可以将/usr/local/bin/php放在脚本本身的第一行中,如下所示:

代码语言:javascript
复制
#!/usr/local/bin/php
票数 2
EN

Stack Overflow用户

发布于 2011-06-17 01:45:07

你太接近了..。您需要在不转发!的情况下通过管道传输它:

代码语言:javascript
复制
:0
|/usr/bin/php /usr/home/myname/testemail/emailtester.php

编辑我放在PHP的完整路径中,以防procmail的$PATH不完整。将其更改为您的实际php路径。

票数 4
EN

Stack Overflow用户

发布于 2011-06-17 02:37:45

为了避免电子邮件循环,我这样做了:

代码语言:javascript
复制
PATH=/usr/local/bin:/bin:/usr/bin
MAILDIR=$HOME/Mail
DEFAULT=$HOME/Mail/inbox
LOGFILE=$HOME/procmail.`date +%Y-%m`.log
SHELL=/usr/bin/ksh

MY_XLOOP='X-Loop: emailtester.php'

:0
* ! ^$MY_XLOOP
{
    # add a header
    # 'f' = filter: continue processing results of program
    # 'w' = wait for program to return
    # 'h' = pass message headers to program
    :0fwh
    | formail -A "$MY_XLOOP"

    # then forward the message
    # 'c' = send a copy to recipient and continue processing
    :0c
    | php /usr/home/myname/testemail/emailtester.php
}

# if we get here, then the message has an X-Loop header.
# let it fall into $DEFAULT
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6376242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档