Как сохранить файл для каждого content_type, а не для каждого uid с imaplib и электронной почтой - PullRequest
0 голосов
/ 21 марта 2020

Я успешно сохраняю содержимое каждого электронного письма со следующим кодом в виде файла .txt,. html или .PDF. Тем не менее, я хотел бы сохранить версию каждого типа content_type для каждого письма (для каждого идентификатора пользователя). В настоящее время он сохраняет только один тип файла для каждого идентификатора пользователя.

Например, электронное письмо с вложением 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

^ Текущие выходные файлы

1 Ответ

0 голосов
/ 22 марта 2020

Я не совсем уверен, но я думаю, что ваша проблема в том, что for item in item_list: l oop.

email_message окажется только последним элементом в этом l oop создает.

Вам нужно набрать sh почти все, что стоит в этой вкладке l oop 1?

Также я бы предположил, что вы захотите использовать часть вместо элемента в этой строке: option = str(item)[2:-1] + ' ' + date_[:-15] + ' ' + from_ + ' '

Опять не до конца уверен, но надеюсь, что это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...