2011-06-16 63 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