Python Извлечение тела сообщения электронной почты - строка символов мусора - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь получить тело письма, используя библиотеку email.

Я успешно получаю доступ к серверу, учетной записи, входящей почте и сообщению.

def connect(server, user, password):
    m = imaplib.IMAP4_SSL(server)
    m.login(user, password)
    m.select()
    return m 

def read_email(m, emailid):
    resp, data = m.fetch(emailid, "(UID BODY[TEXT])")
    email_body = data[0][1]
    mail = email.message_from_string(email_body)

    # extract email body

    if mail.is_multipart():
        for payload in mail.get_payload():
            print payload.get_payload()
    else:
        print mail.get_payload()

m = connect('outlook.office365.com', credentials.mailusername, 
credentials.mailpassword)
m.select('INBOX', readonly=True)
typ, emailid = m.search(None, header)
read_email(m, emailid[0])

Мои результатыиз .get_payload() - это

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IGRpcj0iYXV0byI+DQpI
aSBNYXR0LA0KPGRpdj48YnI+DQo8L2Rpdj4NCjxkaXY+TXkgdHJhaW4gaXMgZHVlIHRvIGFycml2

Я искал, но не могу найти, что я делаю неправильно.

Помощь?

Заранее спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Ваша полезная нагрузка кодируется с использованием base64:

echo "PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IGRpcj0iYXV0byI+DQpIaSBNYXR0LA0KPGRpdj48YnI+DQo8L2Rpdj4NCjxkaXY+TXkgdHJhaW4gaXMgZHVlIHRvIGFycml2" | base64 --decode

производит:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body dir="auto">
Hi Matt,
<div><br>
</div>
<div>My train is due to arriv

Вы можете использовать модуль Python base64 для программного декодирования.Вы также можете использовать get_payload() с decode=True ( документы ) для автоматического декодирования в некоторых случаях.

Пример модуля base64:

python2 -c "import base64; print base64.b64decode('PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IGRpcj0iYXV0byI+DQpIaSBNYXR0LA0KPGRpdj48YnI+DQo8L2Rpdj4NCjxkaXY+TXkgdHJhaW4gaXMgZHVlIHRvIGFycml2')"
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body dir="auto">
Hi Matt,
<div><br>
</div>
<div>My train is due to arriv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...