我有一个存储在'text / plain'文件中的MIME消息,如下所示:
MIME消息应该是多部分消息。
如何在Python中解析它?我已经尝试过email.message_from_string(),但它仍然被编码为'text / plain',因此我无法使用电子邮件库来解析它。
我的代码如下所示:
f = open(settings.MEDIA_ROOT + '/raw.txt', 'r')
msg = email.message_from_string(f.read())
i = 1
for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
ext = mimetypes.guess_extension(part.get_content_type())
filename = 'part-%03d%s' % (i, ext)
fp = open(settings.MEDIA_ROOT + '/' + filename, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
i += 1
我会非常感谢任何帮助!
答案 0 :(得分:5)
您应该能够使用this SO answer中的代码解析消息并浏览部分,但是,首先您需要添加
Content-type: multipart/alternative;
boundary="cbsms-main-boundary"
到邮件的开头,或保留完整的原始邮件。
我相信你的代码有效。将上面的两行添加到MIME_Message_in_text_file.txt后,我跑了
test.py:
import os
import sys
import mimetypes
import email
msg = email.message_from_file(open(sys.argv[1]))
for i,part in enumerate(msg.walk(),1):
if part.get_content_maintype() == 'multipart':
continue
ext = mimetypes.guess_extension(part.get_content_type())
filename='part-%03d%s'%(i, ext)
# filename=os.path.join('settings.MEDIA_ROOT', filename)
print(filename)
with open(filename, 'wb') as fp:
fp.write(part.get_payload(decode=True))
这样:
% test.py MIME_Message_in_text_file.txt
并收到:
part-002.xml
part-004.jpe
part-005.ksh