Python网络编程基础笔记-解析MIME嵌套MIME对象
1.使用emal库解析多个MIME对象嵌套
# -*- coding:cp936 -*-
#!/usr/bin/env python
"""
打印嵌套MIME对象
1。如果嵌套的对象又为一个MIME,进行递归调用。
"""
import sys,email
def printmsg(msg,level = 0):
l = "| " * level
l2 = l + "|"
print l + " + Message Headers:"
for header,value in msg.items():
print l2,header + ":",value
if msg.is_multipart():
for item in msg.get_payload():
printmsg(item,level + 1)
msg = email.message_from_file(file("JCParseMIME.email"))
printmsg(msg)
2.测试用的email
Content-Type: multipart/mixed; boundary="===============0874728357=="
MIME-Version: 1.0
--===============0874728357==
Content-Type: multipart/alternative; boundary="===============1169888608=="
MIME-Version: 1.0
--===============1169888608==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Hello,This is nested message test.
---jcodeer
--===============1169888608==
Content-Type: text/html; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Hell,
This is bold test messsage test.
---jcodeer
--===============1169888608==--
--===============0874728357==
Content-Type: text/x-python; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attach; filename="JCNestedMIME.py"
# -*- coding:cp936 -*-
#!/usr/bin/env python
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Utils,Encoders
import mimetypes,sys
def genpart(data,contenttype):
maintype,subtype = contenttype.split("/")
if maintype == "text":
retval = MIMEText(data,_subtype = subtype)
else:
retval = MIMEBase(maintype,subtype)
retval.set_payload(data)
Encoders.encode_base64(retval)
return retval
def attachment(filename):
fd = file(filename,"rb")
mimetype,mimeencoding = mimetypes.guess_type(filename)
if mimeencoding or (mimetype is None):
mimetype = "application/octet-stream"
retval = genpart(fd.read(),mimetype)
retval.add_header("Content-Disposition","attach",filename = filename)
fd.close()
return retval
messagetext = """
Hello,This is nested message test.
---jcodeer
"""
messagehtml = """
Hell,
This is bold test messsage test.
---jcodeer
"""
msg = MIMEMultipart()
body = MIMEMultipart("alternative")
body.attach(genpart(messagetext,"text/plain"))
body.attach(genpart(messagehtml,"text/html"))
msg.attach(body)
msg.attach(attachment("JCNestedMIME.py"))
print msg.as_string()
--===============0874728357==--
3.输出结果
+ Message Headers:
| Content-Type: multipart/mixed; boundary="===============0874728357=="
| MIME-Version: 1.0
| + Message Headers:
| | Content-Type: multipart/alternative; boundary="===============1169888608=="
| | MIME-Version: 1.0
| | + Message Headers:
| | | Content-Type: text/plain; charset="us-ascii"
| | | MIME-Version: 1.0
| | | Content-Transfer-Encoding: 7bit
| | + Message Headers:
| | | Content-Type: text/html; charset="us-ascii"
| | | MIME-Version: 1.0
| | | Content-Transfer-Encoding: 7bit
| + Message Headers:
| | Content-Type: text/x-python; charset="us-ascii"
| | MIME-Version: 1.0
| | Content-Transfer-Encoding: 7bit
| | Content-Disposition: attach; filename="JCNestedMIME.py"