import osimport sysimport tempfileimport mimetypesimport webbrowser# Import the email modules we'll needfrom email import policyfrom email.parser import BytesParser# An imaginary module that would make this work and be safe.from imaginary import magic_html_parser# In a real program you'd get the filename from the arguments.with open('outgoing.msg', 'rb') as fp:msg = BytesParser(policy=policy.default).parse(fp)# Now the header items can be accessed as a dictionary, and any non-ASCII will# be converted to unicode:print('To:', msg['to'])print('From:', msg['from'])print('Subject:', msg['subject'])# If we want to print a preview of the message content, we can extract whatever# the least formatted payload is and print the first three lines. Of course,# if the message has no plain text part printing the first three lines of html# is probably useless, but this is just a conceptual example.simplest = msg.get_body(preferencelist=('plain', 'html'))print()print(''.join(simplest.get_content().splitlines(keepends=True)[:3]))ans = input("View full message?")if ans.lower()[0] == 'n':sys.exit()# We can extract the richest alternative in order to display it:richest = msg.get_body()partfiles = {}if richest['content-type'].maintype == 'text':if richest['content-type'].subtype == 'plain':for line in richest.get_content().splitlines():print(line)sys.exit()elif richest['content-type'].subtype == 'html':body = richestelse:print("Don't know how to display {}".format(richest.get_content_type()))sys.exit()elif richest['content-type'].content_type == 'multipart/related':body = richest.get_body(preferencelist=('html'))for part in richest.iter_attachments():fn = part.get_filename()if fn:extension = os.path.splitext(part.get_filename())[1]else:extension = mimetypes.guess_extension(part.get_content_type())with tempfile.NamedTemporaryFile(suffix=extension, delete=False) as f:f.write(part.get_content())# again strip the <> to go from email form of cid to html form.partfiles[part['content-id'][1:-1]] = f.nameelse:print("Don't know how to display {}".format(richest.get_content_type()))sys.exit()with tempfile.NamedTemporaryFile(mode='w', delete=False) as f:# The magic_html_parser has to rewrite the href="cid:...." attributes to# point to the filenames in partfiles. It also has to do a safety-sanitize# of the html. It could be written using html.parser.f.write(magic_html_parser(body.get_content(), partfiles))webbrowser.open(f.name)os.remove(f.name)for fn in partfiles.values():os.remove(fn)# Of course, there are lots of email messages that could break this simple# minded program, but it will handle the most common ones.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。