国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python解析郵件

tracymac7 / 487人閱讀

摘要:發(fā)送郵件好說,接收和下載郵件也好說。所以我們想要解析一封郵件把它拆成人能讀懂的標(biāo)題收發(fā)件人內(nèi)容附件等,就必須得理解這套協(xié)議。了解協(xié)議,其實(shí)主要就是了解郵件的嵌套結(jié)構(gòu)。另一種壓縮方式,需要用庫函數(shù)來解碼。

郵件的解析是個(gè)大課題,遠(yuǎn)超一般人的預(yù)期。它遠(yuǎn)比發(fā)送郵件和接收郵件要復(fù)雜的多的多。
這就是為什么網(wǎng)上中文外文搜郵件的問題,絕大多數(shù)都是講發(fā)送的而講接收的很少。

發(fā)送郵件好說,接收和下載郵件也好說。關(guān)鍵是下載下來的郵件是一種比HTML還復(fù)雜的嵌套結(jié)構(gòu)

MIME郵件協(xié)議

參考:阮一峰 - MIME筆記
參考:MIME郵件的組織結(jié)構(gòu)
參考:Parsing email using Python part 2 of 2 : The content
參考:Mozilla - MIME types

先不論P(yáng)ython,也不談什么郵件發(fā)展歷史,只論現(xiàn)在:
現(xiàn)在我們要達(dá)到通過編程來解析郵件,就絕對(duì)避不開這個(gè)問題:MIME郵件結(jié)構(gòu).

MIME是一整套的協(xié)議,就像HTTP協(xié)議、TCP協(xié)議之類的一樣,都是解析郵件的一套規(guī)則。

所以我們想要解析一封郵件(把它拆成人能讀懂的標(biāo)題、收發(fā)件人、內(nèi)容、附件等),就必須得理解這套協(xié)議。
就算有現(xiàn)成的Python處理庫也一樣要懂了以后才能開始操作。

了解MIME協(xié)議,其實(shí)主要就是了解郵件的嵌套結(jié)構(gòu)。這個(gè)懂了就全懂了。

要知道,我們收到的一封郵件可能是以下這幾種不同的結(jié)構(gòu)類型:

簡(jiǎn)單的幾句話,全是文字。 (text/plain)

非常漂亮的網(wǎng)頁一樣的頁面。(text/html)

包括回復(fù)另一封郵件的層層嵌套的內(nèi)容。(multipart/mixed)

帶附件的內(nèi)容,比如一張圖片。(multipart/mixed) + (image/jpeg)

當(dāng)然,這不是全部,只是有代表性的幾種文檔類型。最重要的是知道:
所有超出簡(jiǎn)單文字或網(wǎng)頁HTML之外的,全都是multiparts
最難理解的也是這個(gè)multiparts。

下面是最復(fù)雜的Multiparts郵件,包括了所有能包括的結(jié)構(gòu)。其中每個(gè)方塊都有自己的Content TypeBody

簡(jiǎn)單點(diǎn)的結(jié)構(gòu)圖:

[站外圖片上傳中...(image-8219fc-1548158814349)]

文字型結(jié)構(gòu)圖:

multipart/mixed
 |
 +-- multipart/related
 |    |
 |    +-- multipart/alternative
 |    |    |
 |    |    +-- text/plain
 |    |    +-- text/html
 |    |      
 |    +-- image/gif
 |
 +-- application/msword

詳細(xì)一點(diǎn)的結(jié)構(gòu)圖:

[站外圖片上傳中...(image-36fdd8-1548158814349)]

這里是所有郵件能支持的Content Type文檔類型:

text/plain: 純文本,文件擴(kuò)展名.txt

text/html: HTML文本,文件擴(kuò)展名.htm和.html

image/jpeg: jpeg格式的圖片,文件擴(kuò)展名.jpg

image/gif: GIF格式的圖片,文件擴(kuò)展名.gif

audio/x-wave: WAVE格式的音頻,文件擴(kuò)展名.wav

audio/mpeg: MP3格式的音頻,文件擴(kuò)展名.mp3

video/mpeg: MPEG格式的視頻,文件擴(kuò)展名.mpg

application/zip: PK-ZIP格式的壓縮文件,文件擴(kuò)展名.zip

編程上需要明確的是:要讀取嵌套結(jié)構(gòu),必須用遞歸的方法。

Content-Disposition 附件的存在方式

對(duì)于附件,有兩種存在方式:

inline: 嵌入在文字里的,比如HTML格式郵件中顯示的圖片

attachment: 是附在結(jié)尾的,多帶帶的一部分

一般我們只需要處理attachment格式的附件,而inline的東西就讓它保存在inline里吧。
郵件里面要獲取這個(gè)部分的格式,需要找到這個(gè)參數(shù):Content-Disposition。其它并拍的參數(shù)還要Content-TypeContent-ID等。

Content-Transfer-Encoding 文本傳輸?shù)木幋a方式

這個(gè)只針對(duì)text/plain & text/html類型的文本有用。
這個(gè)是每封郵件的必須數(shù)據(jù),它必須要指出每段文本的傳輸編碼方式,有的可以壓縮傳輸(base64),有的可以原文傳輸(8bit或7bit),有的可以內(nèi)置base64圖片可直接打印(quoted-printable)。

正因?yàn)槊糠忄]件都可能采用不同的傳輸編碼策略,所以我們解析內(nèi)容之前必須要判斷是哪種方式才能正確解碼為原文的內(nèi)容。

目前常見的傳輸編碼方式有:

8bit7bit:這個(gè)最簡(jiǎn)單,直接是原文,不需要轉(zhuǎn)碼。

base64:內(nèi)容全文用base64壓縮,所以需要用base64.b64decode()庫函數(shù)來解碼。

quoted-printable:另一種壓縮方式,需要用quopri.decodestring()庫函數(shù)來解碼。

獲取當(dāng)前內(nèi)容的傳輸編碼方式的代碼如下:

encoding = part.get("Content-Transfer-Encoding")

其中part可以是庫email.message.Message的實(shí)例或者其中multipart多部分中的sub-part,都可以。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/43082.html

相關(guān)文章

  • 郵件信息抽取

    摘要:公司的一個(gè)項(xiàng)目,首先需要過濾一下郵件郵件的主要內(nèi)容就是應(yīng)聘信息當(dāng)然會(huì)產(chǎn)生很多的垃圾郵件,比如智聯(lián)招聘發(fā)的廣告獵頭郵件和網(wǎng)易廣告等這里首先要過濾一下郵件,把沒有用處的垃圾郵件過濾掉本著先易后難的原則,首先使用簡(jiǎn)單的過濾方法簡(jiǎn)單的說就是根據(jù)標(biāo)題 公司的一個(gè)項(xiàng)目,首先需要過濾一下郵件郵件的主要內(nèi)容就是應(yīng)聘信息當(dāng)然會(huì)產(chǎn)生很多的垃圾郵件,比如智聯(lián)招聘發(fā)的廣告、獵頭郵件和網(wǎng)易廣告等這里首先要過濾一...

    codercao 評(píng)論0 收藏0
  • 我用Python寫了一個(gè)郵箱腳本發(fā)給班花,沒想到事情鬧大了...

    摘要:大家好,我是辣條。最先審核沒通過,說我腳本涉嫌控制電腦違法違規(guī),經(jīng)過我再三的溝通之下,完整代碼刪除了,希望能通過審核。 大家好,我是辣條。? 前言 開學(xué)沒多久,事又多正愁缺寫博客的素材,這不馬上就來了,憨憨室友又要整活?,看在友(紅)情(包)的份上必須幫忙。 我起初的想法是通過郵箱發(fā)送表白...

    luckyyulin 評(píng)論0 收藏0
  • Python】逆向JavaScript,深度解析Q群成員數(shù)據(jù)的采集與郵件的來源,閱讀完后你就明白了

    摘要:在這里真心感謝一直在支持我的那幾個(gè)粉絲,謝謝你們的持續(xù)關(guān)注點(diǎn)贊。果然,第三個(gè)包也是按的步差來的,而為零不變,也不變。函數(shù)里面的話就是個(gè)循環(huán)咯,當(dāng)條件不滿足時(shí)就一直加,知道條件滿足為止。我每天都會(huì)抽時(shí)間給我的粉絲解答,給與一些學(xué)習(xí)資源。 目錄 前言 準(zhǔn)備工作 分析(x0) 分析(x1) 分析(...

    dkzwm 評(píng)論0 收藏0
  • [新手開源] 爬取韓寒“一個(gè)”文章且自動(dòng)郵件發(fā)送功能

    摘要:源碼地址準(zhǔn)備一臺(tái)云服務(wù)器寫好的腳本效果因?yàn)楝F(xiàn)在一個(gè)的客戶端啟動(dòng)越來越慢,而且很多自己不感興趣的東西我只是想看看文章,所以就寫了這個(gè)小爬蟲。因?yàn)橐粋€(gè)是每天點(diǎn)會(huì)更新,所以自己的服務(wù)器要做一個(gè)定時(shí)服務(wù),下自帶了定時(shí)任務(wù)。 源碼地址:https://github.com/xcc3641/pySendOneToEmail 準(zhǔn)備 一臺(tái)云服務(wù)器 寫好的Python腳本 效果 因?yàn)楝F(xiàn)在一個(gè)的And...

    zhkai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<