Я пытаюсь загрузить все данные, содержащиеся в электронных письмах 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)
Я не хочу перечислять каждый заголовок и добавлять его в отдельный список. Я хочу перебирать каждое письмо:
- Добавить данные заголовка в тот же список
- Добавить тело письма в тот же список
- Извлечь в CSV