2011-11-29 62 views
7

我想讓postfix發送所有郵件到一個python腳本來掃描郵件。Python:Postfix stdin

但是,如何將輸出從postfix輸出到python?

什麼是Python的標準輸入?

你能給一個代碼示例嗎?

回答

6

從後綴推送郵件到Python腳本,加上這樣一行到你的postfix別名文件:

# send to [email protected] 
emailname: "|/path/to/script.py" 

python email.FeedParser module可以構造一個對象,表示從標準輸入一個MIME電子郵件消息,通過執行類似這樣的:

# Read from STDIN into array of lines. 
email_input = sys.stdin.readlines() 

# email.FeedParser.feed() expects to receive lines one at a time 
# msg holds the complete email Message object 
parser = email.FeedParser.FeedParser() 
msg = None 
for msg_line in email_input: 
    parser.feed(msg_line) 
msg = parser.close() 

從這裏,你需要遍歷的msg的MIME部分,並相應地採取行動。有關您需要的方法,請參閱the documentation on email.Message objects。例如email.Message.get("Header")返回標頭值Header

+0

現在的問題是,我希望這發生在每一封電子郵件中,而不僅僅是存在的emaildomains。是否有所有域的wlddcard? –

+0

@LucasKauffman這是一個後綴配置問題。可能最好在serverfault.com上詢問,因爲我沒有答案。 –

+2

此外,您可能需要像這樣調用python解釋器:'emailname:「| python path/to/script.py」'。至少這就是我們在othello所要做的。 – swandog

9

而不是調用sys.stdin.readlines(),然後按照Michael的建議循環並傳遞行到email.FeedParser.FeedParser().feed(),您應該將文件對象直接傳遞給電子郵件解析器。

爲此目的,標準庫提供對話功能email.message_from_file(fp)。因此,你的代碼變得更簡單:

import email 
msg = email.message_from_file(sys.stdin)