Невозможно прочитать необработанные данные электронной почты с помощью file.readlines () - PullRequest
0 голосов
/ 21 марта 2020

Я пытался проанализировать необработанные данные электронной почты по указанному c пути к файлу. Но я получаю сообщение об ошибке всякий раз, когда я использую file.readlines () для чтения файла с библиотекой электронной почты. И, если я использовал file.read (), он анализирует данные только с первой отправленной почты. Как мне проанализировать и проанализировать необработанные почтовые данные?

with open(file_path, "r") as file:
    content = file.readlines()
    email_to_string = email.message_from_string(content)

    headers = email_to_string._headers

    header_contents = {}
    for header in headers:
        if "From" in header:
            header_contents['From'] = header[-1]
        elif "To" in header:
            header_contents['To'] = header[-1]
        elif "Date" in header:
            header_contents['Date'] = header [-1]
        elif "Subject" in header:
            header_contents['Subject'] = header[-1]
        print("HEADER CONTENTS", header_contents)

    if email_to_string.is_multipart():
        body = []
        for lines in body.get_payload():
            body.append(lines)
        body = " ".join(body)
    else:
        body = email_to_string.get_payload()


    print("HEADER", headers)
    print("HEADER CONTENTS", header_contents)
    print("BODY", body)

** Ошибка **

    Traceback (most recent call last):
    File "test.py", line 7, in <module>
        email_to_string = email.message_from_string(content)
      File "/usr/lib/python3.6/email/__init__.py", line 38, in message_from_string
        return Parser(*args, **kws).parsestr(s)
      File "/usr/lib/python3.6/email/parser.py", line 68, in parsestr
        return self.parse(StringIO(text), headersonly=headersonly)
    TypeError: initial_value must be str or None, not list

1 Ответ

1 голос
/ 21 марта 2020

Метод email.message_from_string () ожидает строковый тип данных, но file.readlines() возвращает список.

Попробуйте использовать file.read() для возврата строки. Вот ссылка на его документацию.

with open(file_path, 'r') as file_:
    content = file_.read().replace('\n', '')
    email_to_string = email.message_from_string(content)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...