我已成功使用以下代码将每个电子邮件的内容保存为.txt,.html或.PDF文件。但是,我想为每个电子邮件(每个uid)保存每个content_type的版本。当前,它仅为每个uid保存一种文件类型。
例如,带有PDF附件的电子邮件目前仅保存PDF。我希望将PDF附件以及电子邮件的纯文本内容保存在2个单独的文件中。
感谢您的帮助。
import imaplib
import email
import os
import mimetypes
mail = imaplib.IMAP4_SSL('imap.secureserver.net',993)
mail.login('[user]', '[pw]')
mail.select('Inbox')
result, data = mail.uid('search', None, 'ALL')
item_list = data[0].split()
for item in item_list:
result2, email_data = mail.uid('fetch',item,'(RFC822)')
raw_email = email_data[0][1].decode("utf-8")
email_message = email.message_from_string(raw_email)
print_dir = False
if print_dir: print(dir(email_message)) #options, e.g. list of from, to etc.
from_ = email_message['From']
date_ = email_message['Date']
for part in email_message.walk():
option = str(item)[2:-1] + ' ' + date_[:-15] + ' ' + from_ + ' '
content_type = part.get_content_type()
print(str(item),' ',content_type)
if content_type == 'text/html':
filename = option + '.html'
elif content_type == 'text/plain':
filename = option + '.txt'
elif content_type == 'application/pdf':
attachment = part.get_filename() #attachment filename
filename = option + str(attachment)
else:
# Guesses the file type
ext = mimetypes.guess_extension(content_type)
if not ext:
ext = '.bin'
filename = option + ext
save_path = os.getcwd() + '/' + filename
with open(save_path, 'wb') as fp:
fp.write(part.get_payload(decode=True))
^对于多类型,我想保存一个带有所有类型扩展名的文件。例如22382,PDF和txt
^当前输出文件
我不确定,但是我认为您的问题出在for item in item_list:
循环中。
email_message
最终只会是该循环中创建的最后一个项目。
您是否需要将循环1选项卡中的几乎所有内容都推送出去?
此外,我假设您要在此行中使用零件而不是项目:option = str(item)[2:-1] + ' ' + date_[:-15] + ' ' + from_ + ' '
再次,不是完全确定,但是希望这会有所帮助!