日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)

發布時間:2023/12/20 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python自帶的email模塊是個很有意思的東西,它可以對郵件編碼解碼,用來處理郵件非常好用。

處理郵件是一個很細致的工作,尤其是解碼郵件,因為它的格式變化太多了,下面先看看一個郵件的源文件:

Received: from 192.168.208.56 ( 192.168.208.56 [192.168.208.56] ) by

ajax-webmail-wmsvr37 (Coremail) ; Thu, 12 Apr 2007 12:07:48 +0800 (CST)

Date: Thu, 12 Apr 2007 12:07:48 +0800 (CST)

From: user1

To: zhaowei

Message-ID: <31571419.200911176350868321.JavaMail.root@bj163app37.163.com>

Subject: =?gbk?B?u+nJtA==?=

MIME-Version: 1.0

Content-Type: multipart/Alternative;

boundary="----=_Part_21696_28113972.1176350868319"

------=_Part_21696_28113972.1176350868319

Content-Type: text/plain; charset=gbk

Content-Transfer-Encoding: base64

ztLS0b+qyrzS1M6qysfSu7j20MfG2ru70ru0zqOs1K3AtMrH0ru49tTCtffSu7TOztLDx8/W1NrT

prjDysew67XjssXE3MjI1ebC6bezICAg

------=_Part_21696_28113972.1176350868319

Content-Type: text/html; charset=gbk

Content-Transfer-Encoding: quoted-printable

=CE=D2=D2=D1=BF=AA=CA=BC=D2=D4=CE=AA=CA=C7=D2=BB=B8=F6=D0=C7=C6=DA=BB=

=BB=D2=BB=B4=CE=A3=AC=D4=AD=C0=B4=CA=C7=D2=BB=B8=F6=D4=C2=B5=F7=D2=BB=B4=CE=

=CE=D2=C3=C7=CF=D6=D4=DA=D3=A6=B8=C3=CA=C7=B0=EB=B5=E3=B2=C5=C4=DC=C8=

=C8

=D5=E6=C2=E9=B7=B3

------=_Part_21696_28113972.1176350868319--

上面的就是以封郵件的源文件,從第一行到第一個空行之間的為信件頭,后面的就是信件體了。把上面的信息復制下來存到一個叫xxx.eml的文件里,用鼠標雙擊就可以看到內容,當然看到的是解碼后的,是outlook幫你解碼了。

看看email模塊怎么處理這個郵件,假設信件已經存為xxx.eml。

#-*- encoding: gb2312 -*-importemail

fp=open("xxx.eml","r")

msg=email.message_from_file(fp)#直接文件創建message對象,這個時候也會做初步的解碼subject=msg.get("subject")#取信件頭里的subject, 也就是主題#下面的三行代碼只是為了解碼象=?gbk?Q?=CF=E0=C6=AC?=這樣的subjecth=email.Header.Header(subject)

dh=email.Header.decode_header(h)

subject=dh[0][0]

print"subject:", subject

print"from:", email.utils.parseaddr(msg.get("from"))[1]#取fromprint"to:", email.utils.parseaddr(msg.get("to"))[1]#取tofp.close()

這段代碼可以把一封郵件中的主題、發件人、收件人解析出來。email.utils.parseaddr是用來專門解析郵件地址的,原因是郵件地址很多時候在原文里是這樣寫的:user1 , email.utils.parseaddr就可以把它解析為一個列表,第一項是user1, 第二項是xxxxxxxx@163.com, 這里只顯示了后面以部分。

前面那段代碼只是解析了信件頭,接著解析信件體吧。信體里可能有純文本的plain和html兩部分,也可能有附件。這里需要mime的知識,詳細介紹可以從網上搜搜。我這里就不說了,下面看看怎么解析的:

#-*- encoding: gb2312 -*-importemail

fp=open("xxx.eml","r")

msg=email.message_from_file(fp)

#循環信件中的每一個mime的數據塊forparinmsg.walk():

ifnotpar.is_multipart():#這里要判斷是否是multipart,是的話,里面的數據是無用的,至于為什么可以了解mime相關知識。name=par.get_param("name")#如果是附件,這里就會取出附件的文件名ifname:

#有附件#下面的三行代碼只是為了解碼象=?gbk?Q?=CF=E0=C6=AC.rar?=這樣的文件名h=email.Header.Header(name)

?dh=email.Header.decode_header(h)

?fname=dh[0][0]

print'附件名:', fname

?data=par.get_payload(decode=True)#解碼出附件數據,然后存儲到文件中try:

?f=open(fname,'wb')#注意一定要用wb來打開文件,因為附件一般都是二進制文件except:

print'附件名有非法字符,自動換一個'?f=open('aaaa','wb')

?f.write(data)

?f.close()

else:

#不是附件,是文本內容printpar.get_payload(decode=True)#解碼出文本內容,直接輸出來就可以了。print'+'*60#用來區別各個部分的輸出

簡單吧,并沒有多少代碼就可以實現復雜的解析郵件的功能!

總結

以上是生活随笔為你收集整理的python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。