2009-03-03 12 views
4

我有一個後綴服務器監聽和接收在mywebsite.com收到的所有電子郵件,現在我要顯示的定製界面,這些後綴的電子郵件和即得爲每個用戶集成postfix郵件到我的(Python)的web應用

要要清楚,mywebsite.com的所有用戶都會收到郵件地址,例如[email protected],他們會在我的生產機器上收到電子郵件,但他會在mywebsite.com上的控制面板中自己的控制檯中看到他們。

因此,爲了讓用戶看到他收到的郵件,我需要創建一個postfix郵件的電子郵件副本,以便mywebsite(在django-python上運行)可以輕鬆地反映出來。我如何做到這一點。確切地說,這是我的問題,我如何將postfix郵件轉換爲python郵件對象(以便我的系統/網站)理解它?

只是要清楚我寫的僞代碼來實現我想要的東西:

email_as_python_object = postfix_email_convertor(postfix_email) 
attachments_list = email_as_python_object.attachments 
body = email_as_python_object.body # be it html or whatever 

而且通過我試圖默認的電子郵件模塊的方式,也與Python但那不是方便了所有的情況。甚至我需要手動處理郵件附件(我討厭)。我只需要一個簡單的方法來處理這些情況(我想知道postfix如何理解收到的電子郵件,例如它是如何自動計算出不同的標頭,附件等)。請幫幫我。

回答

7

首先,Postfix郵件路由規則可能非常複雜,你可能首選的解決方案在錯誤的地方涉及很多欺騙手段。你不想不小心顯示一些用戶和他們的郵件,是嗎?其次,儘管Postfix幾乎可以做任何事情,但它不應該只是一個MDA(郵件投遞代理)。

您的解決方案最好通過使用POP3或IMAP服務器(Cyrus IMAPd,Courier等)來解決。 IMAP服務器可以擁有可以閱讀所有用戶郵件的「超級用戶帳戶」。然後,您的Web應用程序可以連接到用戶郵箱並檢索標題和身體。

如果您只想顯示主題行,您可以使用特殊的IMAP命令獲取這些主題並且開銷非常低。儘管Python IMAP庫並不是最容易理解的API。我給它一個鏡頭(未選中!)從標準庫中提取的一個例子:

import imaplib 

sess = imaplib.IMAP4() 
sess.login('superuser', 'password') 
# Honor the mailbox syntax of your server! 
sess.select('INBOX/Luke') # Or something similar. 
typ, data = sess.search(None, 'ALL') # All Messages. 

subjectlines = [] 
for num in data[0].split(): 
    typ, msgdata = sess.fetch(num, '(RFC822.SIZE BODY[HEADER.FIELDS (SUBJECT)])') 
    subject = msgdata[0][1].lstrip('Subject: ').strip() 
    subjectlines.append(subject) 

此登錄到IMAP服務器,選擇用戶的郵箱,獲取所有信息,然後IDS獲取(希望)只有主題行,並將結果數據附加到主題列表中。

要取郵件的其他部分,請使用sess.fetch。對於的具體語法取看看RFC 2060(第6.4.5節)。

祝你好運!

0

我不確定我是否理解這個問題。

如果您希望您的遠程Web應用程序能夠查看用戶的郵箱,可以安裝pop或imap服務器並使用郵件客戶端(您應該可以找到現成的郵件客戶端)來閱讀郵件。或者,您可以使用Python本身附帶的相關庫來編寫一些內容來詢問pop/imap服務器。

如果您想將郵件複製到另一臺機器,可以使用procmail並設置操作來執行此操作。 Postfix可以設置爲以這種方式調用procmail。

+0

不是NXC。我想要的是,我希望用戶在我的網站儀表板中看到他的電子郵件。所以我的網站應該知道電子郵件是正確的(正確顯示)?所以我需要一種方法讓我的應用程序/網站知道電子郵件已有的內容(正文,附件等)。我該怎麼做? – 2009-03-03 18:38:16

+0

我寫了psuedo代碼來獲得我想要的。請看看它。 – 2009-03-03 18:47:45

9

您希望將postfix傳遞到本地郵箱,然後使用Webmail系統讓用戶訪問存儲的郵件。

不要掛在postfix上 - 它只是一個傳輸代理 - 它從一個地方接收消息,並將它們放在別的地方,它不會存儲消息。 因此,postfix將通過SMTP接收郵件,並將它們放在本地郵件文件中。

然後,IMAP或某個網絡郵件系統會將這些消息顯示給您的用戶。

如果你想把郵件集成到你的webapp中,那麼你應該運行一個IMAP服務器,並使用python IMAP庫來獲取郵件。