2011-06-16 103 views
2

我正在尝试做一些自定义电子邮件转发。 #1我在共享服务器上,它使用qmail和可选的procmail。使用procmail调用php脚本

我想要完成的是一个基于时间表的自定义电子邮件转发地址。例如,我有一个在每个工作日工作的员工时间表,并且我有一个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

是路径,使用procmail继承PHP?尝试|/the/full/path/to/php? – Doon 2011-06-16 17:47:04

回答

2

发现大量的试验和错误后的正确方法。

甚至不要使用管道,所有,你需要!正向符号:

所有此规则所要求的是向php脚本请求一封电子邮件,然后转发给该电子邮件。 最终规则:

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

这么简单......我有点生气我花了小时图了这一点,谢谢大家帮助我指出正确的方向!

迈克尔的答案看起来应该起作用,也许它在不同的情况下呢?我无法得到它,这就是为什么我回答这个自己..

新编辑:

注意:您还可以通过标准输入检索PHP整个电子邮件

注意:您可以将/ usr/local/bin目录/ PHP脚本中的自己是这样 在第一行:

#!/usr/local/bin/php 
4

你太亲近了......你需要用管道没有!前锋:

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

编辑我把完整路径到PHP,在案件的procmail的$PATH是不完整的。将其更改为任何您实际的php路径。

+0

嗯...关闭!它告诉我它无法打开php文件: 文件夹:/ usr/local/bin/php -q/usr/home/idnani/testemail/emailtester 1677 “rocmail:执行”/ usr/local/bin/php ,-q,/ usr/home/idnani/testemail/emailtester.php 无法打开输入文件:/usr/home/idnani/testemail/emailtester.php – Ben 2011-06-16 17:58:32

+0

@Ben我不确定procmail运行的是谁的权限,但可能它没有阅读权限,看起来像我的主目录。 – 2011-06-16 18:11:29

+0

需要看看哪些用户procmail运行,和/或如果php有任何限制(像openbasedir或suphp等东西方面,因为你说它是共享主机) – Doon 2011-06-16 18:11:41

2

为了避免邮件循环,我已经做了这样的东西:

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