詳解python實(shí)現(xiàn)郵件解析的方法
前言
如何通過python實(shí)現(xiàn)郵件解析?郵件的格式十分復(fù)雜,主要是mime協(xié)議,本文主要是從實(shí)現(xiàn)出發(fā),具體原理可以自行研究。
一、安裝
通過mailgun開源的Flanker庫(kù)實(shí)現(xiàn)郵件解析。該庫(kù)包含了郵件地址解析和郵件mime格式解析。
輸入以下命令:
pip install flanker
二、代碼實(shí)現(xiàn)
1.郵件頭
def emlAnayalyse(path):
with open(path, 'rb') as fhdl:
raw_email = fhdl.read()
eml = mime.from_string(raw_email)
subject = eml.subject
eml_header_from = eml.headers.get('From')
eml_header_to = eml.headers.get('To')
eml_header_cc=eml.headers.get('Cc')
eml_time = eml.headers.get('Date')
# get_annex(eml, '1')
eml_attachs=attachEml1(eml)
eml_body = contentEml(eml)
f = HTMLFilter()
f.feed(eml_body)
print(f.text)
def main():
path='郵件名.eml'
emlAnayalyse(path)
if __name__ == "__main__":
main()
其中eml.header包含發(fā)送人,收件人,抄送人,時(shí)間等頭信息。
2.郵件正文
# 郵件正文
def contentEml(eml):
# 判斷是否為單部分
if eml.content_type.is_singlepart():
eml_body = eml.body
else:
eml_body = ''
for part in eml.parts:
# 判斷是否是多部分
if part.content_type.is_multipart():
eml_body = contentEml(part)
else:
if part.content_type.main == 'text':
eml_body = part.body
return eml_body
通過回調(diào)函數(shù),取出郵件正文部分
3.郵件附件
def attachEml1(eml):
for part in eml.parts:
if not part.content_type.is_multipart():
name = part.detected_file_name
with open(name, 'wb') as annex:
annex.write(part.body)
通過content_type.is_multipart()判斷是否為附件,將其保存下來。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python創(chuàng)建exe文件的實(shí)現(xiàn)步驟
本文主要介紹了python創(chuàng)建exe文件的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09
python字符串與url編碼的轉(zhuǎn)換實(shí)例
今天小編就為大家分享一篇python字符串與url編碼的轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
python中使用(.)進(jìn)行相對(duì)路徑訪問文件的操作方法
在Python中,使用相對(duì)路徑訪問文件是一種常見的做法,尤其是在處理與腳本位于同一目錄或附近目錄的文件時(shí),這篇文章主要介紹了python中使用(.)來進(jìn)行相對(duì)路徑訪問文件,需要的朋友可以參考下2024-05-05
python如何實(shí)現(xiàn)int函數(shù)的方法示例
int()函數(shù)常用來把其他類型轉(zhuǎn)換為整數(shù),下面這篇文章主要給大家介紹了關(guān)于python如何實(shí)現(xiàn)int函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-02-02
使用Python為Excel文件添加預(yù)設(shè)和自定義文檔屬性
向Excel文件添加文檔屬性是專業(yè)地組織和管理電子表格數(shù)據(jù)的關(guān)鍵步驟,這些屬性,如標(biāo)題、作者、主題和關(guān)鍵詞,增強(qiáng)了文件的元數(shù)據(jù),使得在大型數(shù)據(jù)庫(kù)或文件系統(tǒng)中跟蹤變得更加容易,本文將介紹如何使用Python高效地為Excel文件添加文檔屬性,需要的朋友可以參考下2024-05-05
Python 使用 multiprocessing 模塊創(chuàng)建進(jìn)程池的操作方法
在現(xiàn)代計(jì)算任務(wù)中,尤其是處理大量數(shù)據(jù)或計(jì)算密集型任務(wù)時(shí),使用并行處理可以顯著提升程序性能,Python的multiprocessing模塊提供了創(chuàng)建進(jìn)程池的功能,通過預(yù)先創(chuàng)建的進(jìn)程來并發(fā)執(zhí)行任務(wù),避免了頻繁的進(jìn)程創(chuàng)建和銷毀,感興趣的朋友一起看看吧2024-10-10
Pygame游戲開發(fā)之太空射擊實(shí)戰(zhàn)敵人精靈篇
相信大多數(shù)8090后都玩過太空射擊游戲,在過去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過往展望未來,下面開始講解敵人精靈的使用2022-08-08
基于Python實(shí)現(xiàn)一個(gè)春節(jié)倒計(jì)時(shí)腳本
春節(jié)即將到來,本文將為大家介紹一個(gè)通過Python實(shí)現(xiàn)的春節(jié)倒計(jì)時(shí)腳本,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以自己動(dòng)手嘗試一下2022-01-01
pyspark 讀取csv文件創(chuàng)建DataFrame的兩種方法
今天小編就為大家分享一篇pyspark 讀取csv文件創(chuàng)建DataFrame的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法示例
這篇文章主要介紹了Python使用cx_Oracle調(diào)用Oracle存儲(chǔ)過程的方法,結(jié)合具體實(shí)例分析了Python中通過cx_Oracle調(diào)用PL/SQL的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10

