How to fetch an email body using imaplib in python?
No... imaplib
is a pretty good library, it's imap that's so unintelligible.
You may wish to check that t == 'OK'
, but data[0][1]
works as expected for as much as I've used it.
Here's a quick example I use to extract signed certificates I've received by email, not bomb-proof, but suits my purposes:
import getpass, os, imaplib, emailfrom OpenSSL.crypto import load_certificate, FILETYPE_PEMdef getMsgs(servername="myimapserverfqdn"): usernm = getpass.getuser() passwd = getpass.getpass() subject = 'Your SSL Certificate' conn = imaplib.IMAP4_SSL(servername) conn.login(usernm,passwd) conn.select('Inbox') typ, data = conn.search(None,'(UNSEEN SUBJECT "%s")' % subject) for num in data[0].split(): typ, data = conn.fetch(num,'(RFC822)') msg = email.message_from_string(data[0][1]) typ, data = conn.store(num,'-FLAGS','\\Seen') yield msgdef getAttachment(msg,check): for part in msg.walk(): if part.get_content_type() == 'application/octet-stream': if check(part.get_filename()): return part.get_payload(decode=1)if __name__ == '__main__': for msg in getMsgs(): payload = getAttachment(msg,lambda x: x.endswith('.pem')) if not payload: continue try: cert = load_certificate(FILETYPE_PEM,payload) except: cert = None if cert: cn = cert.get_subject().commonName filename = "%s.pem" % cn if not os.path.exists(filename): open(filename,'w').write(payload) print "Writing to %s" % filename else: print "%s already exists" % filename
The IMAPClient package is a fair bit easier to work with. From the description:
Easy-to-use, Pythonic and complete IMAP client library.
Try my package:https://pypi.org/project/imap-tools/
example:
from imap_tools import MailBox# get list of email bodies from INBOX folderwith MailBox('imap.mail.com').login('test@mail.com', 'password', 'INBOX') as mailbox: bodies = [msg.text or msg.html for msg in mailbox.fetch()]
Features:
- Parsed email message attributes
- Query builder for searching emails
- Work with emails in folders (copy, delete, flag, move, append)
- Work with mailbox folders (list, set, get, create, exists, rename, delete, status)
- No dependencies