Downloading multiple attachments using imaplib

后端 未结 6 968
星月不相逢
星月不相逢 2020-11-29 03:39

How can I download multiple attachments from a single mail using imaplib?

Let\'s say I have an e-mail and that e-mail contains 4 attachments. How can I download all

6条回答
  •  独厮守ぢ
    2020-11-29 03:53

    I reworked the code, breaking it up into functions. I use PEEK so I don't change the UNREAD status of the email messages.

    I'm posting my take on the problem, similar to @John, but I use only functions instead of classes:

    import imaplib
    import email
    
    # Connect to an IMAP server
    def connect(server, user, password):
        m = imaplib.IMAP4_SSL(server)
        m.login(user, password)
        m.select()
        return m
    
    # Download all attachment files for a given email
    def downloaAttachmentsInEmail(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))
    
    # Download all the attachment files for all emails in the inbox.
    def downloadAllAttachmentsInInbox(server, user, password, outputdir):
        m = connect(server, user, password)
        resp, items = m.search(None, "(ALL)")
        items = items[0].split()
        for emailid in items:
            downloaAttachmentsInEmail(m, emailid, outputdir)
    

提交回复
热议问题