我正在尝试进行一些自定义电子邮件转发。 #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证明是困难的,并且有点超出我的范围。(我设法创建了一个无限的电子邮件循环)所以,我宁愿不再尝试。< / p>
我可以尝试在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 :(得分:4)
你是如此接近......你需要管道而不用 !
前进:
:0
|/usr/bin/php /usr/home/myname/testemail/emailtester.php
编辑我已经完成了PHP的完整路径,以防procmail的$PATH
不完整。将其更改为您实际的PHP路径。
答案 1 :(得分: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
答案 2 :(得分:2)
在多次尝试和错误后找到正确的方法。
甚至不使用管道,所有,你需要!前进符号:
所有这个规则都是向php脚本询问一封电子邮件,然后转发到该电子邮件。 最终规则:
:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`
如此简单......我有点疯狂,花了我几个小时来解决这个问题,感谢所有人帮助指出我正确的方向!
迈克尔的回答看起来应该有效,也许它在不同情况下会有效?我无法理解,这就是为什么我自己回答这个问题。新编辑:
注意:您仍然可以通过STDIN
在php中检索整个电子邮件注意:您可以将/ usr / local / bin / php放在脚本本身中 在第一行:
#!/usr/local/bin/php