2013-07-31 43 views
2

我正在嘗試將與特定模式匹配的電子郵件重定向到一個shell腳本,該腳本將創建包含文本和日期戳文件名的文件。將procmail中的電子郵件文本重定向到bash腳本

首先,這裏是從.procmailrc文件是手中的電子郵件關閉的腳本程序:

:0c: 
* Subject: ^Ingest_q.* 
| /home/myname/procmail/process 

這裏是腳本「過程」:

#!/bin/bash 

DATE=`date +%F_%N` 
FILE=/home/myname/procmail/${DATE}_email.txt 

while read line 
     do 
      echo "$line" 1>>"$FILE"; 
     done 

我已經變得非常沮喪因爲我可以在命令行上將文本傳送到此腳本並且它工作正常:

mybox-248: echo 'foo' | process 
mybox-249: ls 
2013-07-31_856743000_email.txt process 

該文件包含單詞「foo」。

我一直在試圖獲得一個電子郵件文本以獲得輸出作爲日期標記的文件幾個小時,並沒有任何工作。

(我也在我的.procmailrc中登錄了,這也不起作用 - 我沒有試圖提到第二個問題,只是想知道這是否可以提供一些關於什麼的提示我可能做錯了......)。

感謝,

GB

+2

如果你不能打開日誌記錄我會懷疑你的'.procmailrc'永遠不會被讀取,因此配方永遠不會被觸發。嘗試[調試](http://partmaps.org/era/mail/procmail-debug.html)你的procmail設置。 –

+0

謝謝Ansgar--這是一個有用的頁面。我正在通過它。 –

回答

2

引用您的嘗試:

:0c: 
* Subject: ^Ingest_q.* 
| /home/myname/procmail/process 

正則表達式是錯誤的,^只在行首匹配,所以它不能Subject:後發生。試試這個。

:0c:process.lock 
* ^Subject: Ingest_q 
| /home/myname/procmail/process 

我也指定了一個名爲lockfile;我不相信Procmail可以從一個腳本名稱推斷一個鎖文件名。由於您可能會同時傳送多個電子郵件,並且您不希望他們的日誌記錄混合在日誌文件中,因此需要使用鎖定文件。

最後,在正則表達式中的尾部.*是完全多餘的,所以我刪除它。

(該奧爾德Procmail mini-FAQ也解決了這些issuesboth。)

我知道你的食譜可能只是一個快速測試你開始在更大的東西之前,但整個配方調用process腳本可以被完全取代像

MAILDIR=/home/myname/procmail 
DATE=`date +%F_%N` 
:0c: 
${DATE}_email.txt 

這將產生伯克利MBOX格式,即每一個消息應該有真正的標頭前From_僞首;如果您不確定這是否已經是這種情況,那麼您應該使用procmail -Yf-來確保這樣做(否則,實際上無法確定一條消息的結束位置和另一條消息的位置;這適用於您的原始解決方案,以及這個替代品)。

由於Procmail會看到您要傳遞給的文件名,因此它可以推斷出鎖文件的名稱,作爲一個小優勢。

使用MAILDIR指定目錄是傳統的方式來做到這一點,但如果您喜歡,您可以指定一個完整的mbox文件路徑。

相關問題