2012-08-14 84 views
2

好吧,我正在嘗試做的事情有一些混亂,所以我正在做這個。我正在尋找寫一個腳本來對付我的收件箱,它會在電子郵件正文中爲我提供發件人地址,主題和URL。我遇到的問題是,腳本的URL解析是從電子郵件中拉取所有URL,而不僅僅是來自正文的URL。下面是一個例子從電子郵件收件箱中提取URL

要:[email protected]

來源:[email protected]

主題:確認你的測試成績

請訪問以下網址進行確認測試得分了。 WWW.test.com/confirmation 再次感謝您的意見。

簽名

喬 (喬斯簽名的一部分具有的圖像) 對圖像的URL是 http://www.test.com/wp-content/uploads/_client_image/66-dcfc0fc8.png

我希望我的輸出是

來源:[email protected]

主題:確認您的測試分數

網址:WWW.test.com/confirmation

我得到這個代替

來源:[email protected]

主題:Confirem測試得分

網址:WWW.test.com /確認,http://www.test.com/wp-content/uploads/_client_image/66-dcfc0fc8.png

這裏是我的腳本

import re 
import mailbox 
import urlparse 

mbx=mailbox.mbox("Mail Box Path") 

url_pattern = re.compile('''["']http://[^+]*?['"]''') 

for k, m in mbx.iteritems(): 
    print "From %s\n" % m['from'] 
    print "Subject %s\n" % m['subject'] 
    print "URL %s\n" % url_pattern.findall(m.as_string()) 
+0

'm.as_string()'是否返回HTML文本?如果是這樣,你可以使用BeautifulSoup,lxml.html來提取鏈接。 – jfs 2012-08-14 20:59:34

回答

0

簽名算作電子郵件的主體 - 所以你不能將它們分開。

如果您確定電子郵件中只有一個您關心的鏈接,那麼您可以嘗試僅查看您匹配的第一個網址 - 但沒有一種(可靠的)方法來確保「只會與電子郵件的正文進行交互,而不會與簽名進行交互。

Someone even wrote a paper on this - 這是非常困難的,特別是當你無法控制你正在處理的電子郵件的格式。