Загрузите все данные, содержащиеся в каждом заголовке, из электронных писем Outlook и тела сообщения в CSV. - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь загрузить все данные, содержащиеся в электронных письмах Outlook, в CSV. Это для создания набора данных, который будет использоваться в рамках проекта университета. Я хочу иметь возможность создать CSV с данными для каждого заголовка, содержащиеся в электронном письме и теле письма и преобразовать в CSV.

Я использую библиотеки IMAPLIB и Email и могу подключаться к своим электронным письмам, подключаться к необходимой папке и выбирать разные заголовки, такие как «Кому», «От», «Тема» и т. Д., И добавлять каждый из них к отдельному человеку. Однако я хочу перебирать каждое электронное письмо, добавлять данные, содержащиеся в каждом заголовке и теле письма, и добавлять их в один список.

from bs4 import BeautifulSoup
import pandas as pd 
#selct the ids for each email in the inbox
result, data = mail.uid('search', None, 'ALL')
mail_ids = data[0]
id_list = mail_ids.split()

print(id_list)

date_list = []
from_list = []
to_list = []
message_text = []
subject_list = []
keyword_list = []

# select the first email id and the latest email id
first_email_id = id_list[0]
latest_email_id = id_list[-1]

#iterate each email and fetch the email using RFC822 protocol
for item in id_list:
    result2, email_data = mail.uid('fetch', latest_email_id, '(RFC822)' )
    raw_email = email_data[0][1].decode("utf-8")
    email_message = email.message_from_string(raw_email)
    to_ = email_message['To']
    from_ = email_message['From']
    subject_ = email_message['Subject']
    categories_ = email_message['Keywords']
    date_ = email_message['Date']
    #print(email_message.get_content_type)

    #getting the email message content  
    counter = 1
    for part in email_message.walk():
        if part.get_content_maintype() == "multipart":
            continue
        filename = part.get_filename()
        if not filename:
            ext ='.html'
            filename = 'msg-part-%08d%s' %(counter, ext)
        counter += 1
    #"""
    #save file
    #"""
    content_type = part.get_content_type() 
    to_list.append(to_)
    from_list.append(from_)
    #date_list.append(date_)
    #date_list = pd.to_datetime(date_list)
    print(subject_)
    print(content_type)
    print(categories_)
    if "plain" in content_type:
        print(part.get_payload())
        message_text.append(msg.get_payload(decode=True))

    elif "html" in content_type:
        html_ = part.get_payload()
        soup = BeautifulSoup(html_, "html.parser")
        text = soup.get_text()
        print(text)
        message_text.append(text)

    else:
        print(content_type)

Я не хочу перечислять каждый заголовок и добавлять его в отдельный список. Я хочу перебирать каждое письмо:

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