在Python 2.7中将电子邮件附件保存到文件
你好,我有一个和这个问题类似的疑问:
我想把所有的邮件附件保存到我电脑的硬盘上。但是如果我没记错的话,并不是所有的多部分邮件内容都是“真实”的文件(比如,有些图片是在邮件的HTML部分里)。我想确保我保存的文件都是附件。
目前我有这个:
mail = "";
for line in sys.stdin:
mail += line;
msg = email.message_from_string(mail);
for part in msg.walk():
check if is file and save
1 个回答
5
根据这个链接:http://www.ianlewis.org/en/parsing-email-attachments-python
我成功写出了这段代码:
import sys;
import email
class Attachement(object):
def __init__(self):
self.data = None;
self.content_type = None;
self.size = None;
self.name = None;
def parse_attachment(message_part):
content_disposition = message_part.get("Content-Disposition", None);
if content_disposition:
dispositions = content_disposition.strip().split(";");
if bool(content_disposition and dispositions[0].lower() == "attachment"):
attachment = Attachement();
attachment.data = message_part.get_payload(decode=True);
attachment.content_type = message_part.get_content_type();
attachment.size = len(attachment.data);
attachment.name = message_part.get_filename();
return attachment;
return None;
if __name__=='__main__':
mail = "";
for line in sys.stdin:
mail += line;
msg = email.message_from_string(mail);
attachements = list();
if(msg.is_multipart()):
for part in msg.walk():
attachement = parse_attachment(part);
if(attachement):
attachements.append(attachement);
for att in attachements:
# write file in binary mode
file = open(att.name, 'wb');
file.write(att.data);
file.close();
print 'OK';