Используя python и imaplib4, как скачать вложение электронной почты и перейти в папку на рабочем столе? - PullRequest
0 голосов
/ 14 мая 2019

Я использую python и модуль imaplib4 для поиска электронного письма, загрузки его вложения в выходной каталог. Я продолжаю получать следующую ошибку (я приложил изображение ошибки ниже):

imaplib.IMAP4.error: команда FETCH недопустима в состоянии NONAUTH, только разрешено в выбранных состояниях

Я думаю, что проблема связана с outputdir, косой чертой и обратной косой чертой. Кто-нибудь может помочь решить? Смотрите код ниже:

import imaplib
import email
import datetime
# Connect to an IMAP server
def connect(server, user, password):
    m = imaplib.IMAP4_SSL(server)
    print("{0} Connecting to mailbox via IMAP...".format(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")))
    m.login(user, password)
    m.select()
    return m
# Download all attachment files for a given email
def downloadAttachmentsInEmail(m, emailid, outputdir):
    resp, data = m.fetch(emailid, "(BODY.PEEK[])")
    email_body = data[0][1]
    mail = email.message_from_string(email_body)
    if mail.get_content_maintype() != 'multipart':
        return
    for part in mail.walk():
        if part.get_content_maintype() != 'multipart' and part.get('Content-Disposition') is not None:
            open(outputdir + '/' + part.get_filename(), 'wb').write(part.get_payload(decode=True))
server= 'imap-mail.outlook.com'
user='myname@company.com'
password='thisisapassword'
emailid= 'attachmentemail@gmail.com'
outputdir=r'C:\Users\username\Desktop\imap4_folder'
m = imaplib.IMAP4_SSL(server)
connect(server, user, password)
downloadAttachmentsInEmail(m, emailid, outputdir)

Рисунок ошибки: enter image description here

1 Ответ

0 голосов
/ 14 мая 2019

Connect создает свое собственное соединение IMAP и возвращает его, но вы игнорируете его и передаете несвязанный сеанс IMAP на downloadAttachmentsInEmail.

Вам следует изменить свой код на:

# m = imaplib.IMAP4_SSL(server)     # useless
m = connect(server, user, password)
downloadAttachmentsInEmail(m, emailid, outputdir)
...