詳解python實(shí)現(xiàn)郵件解析的方法
前言
如何通過(guò)python實(shí)現(xiàn)郵件解析?郵件的格式十分復(fù)雜,主要是mime協(xié)議,本文主要是從實(shí)現(xiàn)出發(fā),具體原理可以自行研究。
一、安裝
通過(guò)mailgun開(kāi)源的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
通過(guò)回調(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)
通過(guò)content_type.is_multipart()判斷是否為附件,將其保存下來(lái)。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
pyqt5 使用label控件實(shí)時(shí)顯示時(shí)間的實(shí)例
今天小編就為大家分享一篇pyqt5 使用label控件實(shí)時(shí)顯示時(shí)間的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python基礎(chǔ)之面向?qū)ο筮M(jìn)階詳解
這篇文章主要為大家詳細(xì)介紹了Python基礎(chǔ)之面向?qū)ο筮M(jìn)階,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
Python打包后的exe還原成.py的實(shí)現(xiàn)步驟
本文主要介紹了Python打包后的exe還原成.py的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python利用for循環(huán)打印星號(hào)三角形的案例
這篇文章主要介紹了Python利用for循環(huán)打印星號(hào)三角形的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
淺談一下關(guān)于Python對(duì)XML的解析
這篇文章主要介紹了淺談一下關(guān)于Python對(duì)XML的解析,XML是一套定義語(yǔ)義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對(duì)這些部件加以標(biāo)識(shí),需要的朋友可以參考下2023-05-05
python實(shí)現(xiàn)將文本轉(zhuǎn)換成語(yǔ)音的方法
這篇文章主要介紹了python實(shí)現(xiàn)將文本轉(zhuǎn)換成語(yǔ)音的方法,涉及Python中pyTTS模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-05-05

