繁体   English   中英

使用procmail调用php脚本

[英]Using procmail to call a php script

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

我想要完成的是基于时间表的一个地址的一些自定义电子邮件转发。 例如,我有一个工作日程表,每个工作日都在工作,我有一个PHP脚本,用于选择当前正在运行的随机员工的电子邮件地址。

所以我试图在procmail中调用该脚本,并在前行输出结果(这是一个电子邮件地址):

例:

#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

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

MYVAR=`php /usr/home/myname/testemail/emailtester.php`

以及将它输送到前线:

:0
! |php /usr/home/myname/testemail/emailtester.php

我完全不在我的元素中...我试图甚至不使用procmail,我只是将整个电子邮件从qmail传送到php脚本。 我需要标题保持完整,就像正常的前进一样,并且用PHP证明是困难的,并且有点超出我的范围。(我设法创建了一个无限的电子邮件循环)所以,我宁愿不再尝试。

我可以尝试在perl中编写脚本,这是我从未使用过的,但是我需要从Web界面管理日程安排,或者至少以用户友好的方式管理。

任何帮助或建议都会在这一点上受到赞赏,谢谢

编辑:

好吧,既然我不能把代码放在评论中,我只会在这里编辑。

现在在我的日志中得到这个:

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我得到:

"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

编辑:想出来!

在多次试验和错误后找到正确的方法。

甚至不要使用管道,所有,你确实需要! 前进符号:

最终规则:

:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

这么简单......我有点疯狂,花了我几个小时来弄清楚这一点,谢谢大家帮助指出我正确的方向!

你是如此接近......你需要管它没有 ! 向前:

:0
|/usr/bin/php /usr/home/myname/testemail/emailtester.php

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

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

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

在多次试验和错误后找到正确的方法。

甚至不要使用管道,所有,你确实需要! 前进符号:

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

:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

这么简单......我有点疯狂,花了我几个小时来弄清楚这一点,谢谢大家帮助指出我正确的方向!

迈克尔的回答看起来应该有效,也许它在不同情况下会有效? 我无法理解,这就是为什么我自己回答这个问题。

新编辑:

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

注意:您可以在第一行中将/ usr / local / bin / php放在脚本本身中:

#!/usr/local/bin/php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM