剛剛接觸Python的小白,想做一個(gè)腳本從郵箱中提取郵件。然后分析郵件內(nèi)容,因?yàn)槲业泥]箱綁定了一個(gè)Stork網(wǎng)站,定期發(fā)送一批文章,所以我想把這些東西導(dǎo)入一個(gè)表格,以便于以后的統(tǒng)計(jì)。
我的思路是這樣,首先
1.鏈接郵箱;
2.讀取郵件內(nèi)容;
3.分析郵件內(nèi)容;
4.將提取結(jié)果存入csv 。
開始用了imap,結(jié)果給出的提示是:
“NO Select Unsafe Login. Please contact kefu@188.com for help”
當(dāng)然這是網(wǎng)易郵箱對客戶安全的保護(hù),imap可以實(shí)現(xiàn)對郵箱的操作,在非安全登錄模式下,網(wǎng)易不允許實(shí)現(xiàn)這種操作(也可能是我沒學(xué)到imap的用法)。于是乎開始驗(yàn)證自己的密保問題,發(fā)現(xiàn)這個(gè)時(shí)候記不住的東西太多,索性就不再驗(yàn)證密保。然后更換了pop3 。不得不說,pop3這個(gè)簡單的協(xié)議讀取email信息還是挺高效 的。
下面介紹我的代碼:
首先我的郵箱內(nèi)容是這個(gè)樣子為了簡單我把其他郵件都刪了,所以只有兩條信息。

也就是說我只有個(gè)郵件。共有13條記錄可以提取。
首先鏈接郵箱。登錄郵箱所用到的庫函數(shù)是poplib ,這是一個(gè)較為簡答的庫,具體內(nèi)容大家可以上Python官方文檔上面搜索。我所用的到也比較簡單: server = poplib.POP3('pop.***.com')。此句與服務(wù)器建立鏈接,使用sever.user('user')和server.pass_('')登錄服務(wù)器,與郵箱建立鏈接。然后用numofmsg = len(m.list()[1])求出收件箱內(nèi)的郵件數(shù)目。建立一個(gè)循環(huán),使用lines = m.retr(*+1)[1]獲取郵件內(nèi)容輸出為一個(gè)‘Message’類型的對象。使用Parser().parsestr('\r\n'.join(*))對 'Message'進(jìn)行重構(gòu),
maintype = msg.get_content_maintype()
? ? ? ? if maintype == 'multipart':
? ? ? ? ? ? ? ? ? for part in msg.get_payload():
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if part.get_content_maintype() == 'text':
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mail_content = part.get_payload(decode=True).strip()
? ? ? ? ? ? ? ? ? ? ? ? ? ? elif maintype == 'text':
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mail_content = e.get_payload(decode=True).strip()
print(mail_content)
對郵件文本的解碼是件比較頭疼的事查了好多資料才查到上面一段代碼,直接輸出郵件文本內(nèi)容,可以直接存入txt文檔,也可直接進(jìn)行分析。我是存入txt再從txt中提取文本,進(jìn)行分析的。為什么這樣做,因?yàn)榱舸鎮(zhèn)€副本,看看要分析的內(nèi)容怎么去分析。
對文本的分析比較簡單,但是是一件繁瑣的工作,不斷地建立循環(huán),利用段落和字符的特性去構(gòu)造函數(shù)與別的段落進(jìn)行區(qū)分這里正則表達(dá)式和re模塊會(huì)起到很大的作用,這里不再贅訴。