Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing IMAP responses in python

I am using imaplib to work with imap in python, however it looks like it doesn't have means to parse the details of IMAP responses. For example, query like:

   msgdata = connection.fetch(num, "(BODY.PEEK[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] UID)")

where num is the message number, for one mail server may produce (for example):

  ('OK', [('1234 (BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ' UID 3456)'])

and for another:

  ('OK', [('1234 (UID 3456 BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ')'])

As you see, the message details are different and UID is even in different element there. So the question is - is there some library that would allow to automatically sort it out and abstract the details of what particular mail server does?

like image 325
StasM Avatar asked Dec 16 '10 23:12

StasM


3 Answers

Doug Hellman's Python Module of the Week entry for imaplib is a fairly extensive tutorial on the subject, but is far to long to reproduce here.

You might want to use a higher level library like IMAPClient to hide some of the details of the IMAP protocol.

like image 182
lambacck Avatar answered Nov 18 '22 22:11

lambacck


High level IMAP lib may be useful: https://github.com/ikvk/imap_tools

from imap_tools import MailBox
# get list of email subjects from INBOX folder
with MailBox('imap.mail.com').login('[email protected]', 'password', 'INBOX') as mailbox:
    data = [(msg.uid, msg.subject) for msg in mailbox.fetch()]
like image 25
Vladimir Avatar answered Nov 18 '22 21:11

Vladimir


Look at Imbox, you will probably find what your are looking for https://pypi.org/project/imbox/

like image 1
NDZIE Patrick Joel Avatar answered Nov 18 '22 21:11

NDZIE Patrick Joel