2013-08-26 26 views
0

我在一個紅帽安裝。 我正在運行到的是:PROCMAIL ::我如何獲得一個perl腳本後執行郵件傳遞到MBox

  1. perl腳本眺望使用模塊查找消息#0或delieved郵件的郵箱,但現在還沒有。

  2. 如果我使用C標誌對郵件進行復制,我仍然得到相同的響應,它不會將它傳遞到郵箱。

所以我需要知道的是一個procmail配方,它將它傳遞到郵箱,然後觸發腳本處理傳遞的電子郵件。

感謝 羅布

+1

這可能有助於顯示您當前擁有的配方。特別是因爲你提到使用不存在的'C'標誌(你可能意思是'c',但標誌區分大小寫)。另外,爲什麼你需要讓perl腳本從mbox文件中讀取消息,將消息簡單地傳遞給perl腳本可能會更好。 – qqx

+0

我正在使用MAIL :: BOX模塊來執行處理。它從MBox郵箱中調用。是的,我的意思是「C」小寫 – BostonMacOSX

+0

@qqx說的是什麼:你真的應該改變你的Perl腳本來讀取標準輸入的單個消息,而不是寫入mbox,然後再解析它。 – tripleee

回答

3

正如我上面評論指出,這似乎是一個不錯的方法來做到這一點。但是,你 應該能夠使用類似:

:0c: 
* Whatever condition 
/path/to/mbox 

    :0ahi 
    | /path/to/perl/script 

或等價

:0 
* whatever condition 
{ 
    :0c: 
    /path/to/mbox 
    :0ahi 
    | /path/to/perl/script 
} 

第一個配方會導致郵件被傳遞到了MBOX文件,但 因爲c標誌使用的處理將在該配方之後繼續。以下配方中的 a標誌指定僅在使用 前面的配方併成功完成時才使用它。

該配方上的h標誌指定只有標頭應發送到 perl腳本。這可能不會影響它,因爲你說它是 從mbox文件而不是從管道獲取消息;但它確實減少了需要通過管道發送的數據量。

i標誌指定如果procmail不能發送 所有內容到腳本,則不應該抱怨。由於該腳本可能不是從其標準輸入 中讀取的,因此管道緩衝區可能會填滿,導致procmail接收到寫入錯誤;儘管在僅發送消息的標題時這是不太可能發生的 。

如果你真的需要使用Mail :: Box產品系列模塊用於處理 的消息,而不是東西,可以從標準輸入 解析的消息,我建議你至少使用Maildir郵箱而不是mbox。 對於mbox格式沒有真正的規範,並且有很多不同的解釋應該如何工作。差異往往是微妙的,所以事情似乎可以正常工作,直到您收到一條消息 ,這恰好觸發不同實現 (例如具有從From開始的行)之間的不兼容性。這甚至沒有進入 鎖定mbox文件的問題。

+0

我編輯了這個問題,以包括一個替代與恕我直言更具慣用的大括號。否則,我會將其作爲註釋發佈,但您無法在此處獲得正確的代碼格式。 – tripleee

+1

@tripleee您的選擇是**不等同**。這相當於在我原創的第二個配方中使用了「A」標誌。但是因爲我會用'a'來代替你的版本。我已經編輯它來反映這一點。 – qqx

-1

因此,我能夠想出簡單但可能不是最好的答案。由於我可以控制電子郵件何時進入,所以我決定取消對進程的鎖定,並且它工作正常。

因此,如果沒有第二個冒號和「c」選項,它現在運行腳本並可以在郵箱中看到電子郵件。

哎喲...多麼痛苦......兩天浪費在一個簡單的解決方案上。

+1

刪除鎖定聽起來像是一個可怕的解決方案。 Mbox文件對同時編寫的程序員非常脆弱,因此在處理這些文件時應始終使用鎖定。即使你完全控制了消息的傳遞時間,你可以確定後面的事情不會改變嗎? – qqx

+0

但是,如果我不能獲得perl腳本後發射它寫入Mbox這是我唯一的解決方案。 – BostonMacOSX

相關問題