python imaplib to get gmail inbox subjects titles and sender name python imaplib to get gmail inbox subjects titles and sender name python python

python imaplib to get gmail inbox subjects titles and sender name


    c.select('INBOX', readonly=True)    for i in range(1, 30):        typ, msg_data = c.fetch(str(i), '(RFC822)')        for response_part in msg_data:            if isinstance(response_part, tuple):                msg = email.message_from_string(response_part[1])                for header in [ 'subject', 'to', 'from' ]:                    print '%-8s: %s' % (header.upper(), msg[header])

This should give you an idea on how to retrieve the subject and from?


For those looking for how to check mail and parse the headers, this is what I used:

def parse_header(str_after, checkli_name, mailbox) :    #typ, data = m.search(None,'SENTON', str_after)    print mailbox    m.SELECT(mailbox)    date = (datetime.date.today() - datetime.timedelta(1)).strftime("%d-%b-%Y")    #date = (datetime.date.today().strftime("%d-%b-%Y"))    #date = "23-Jul-2012"    print date    result, data = m.uid('search', None, '(SENTON %s)' % date)    print data    doneli = []    for latest_email_uid in data[0].split():        print latest_email_uid        result, data = m.uid('fetch', latest_email_uid, '(RFC822)')        raw_email = data[0][1]        import email        email_message = email.message_from_string(raw_email)        print email_message['To']        print email_message['Subject']        print email.utils.parseaddr(email_message['From'])        print email_message.items() # print all headers


This was my solution to get the useful bits of information from emails:

import datetimeimport emailimport imaplibimport mailboxEMAIL_ACCOUNT = "your@gmail.com"PASSWORD = "your password"mail = imaplib.IMAP4_SSL('imap.gmail.com')mail.login(EMAIL_ACCOUNT, PASSWORD)mail.list()mail.select('inbox')result, data = mail.uid('search', None, "UNSEEN") # (ALL/UNSEEN)i = len(data[0].split())for x in range(i):    latest_email_uid = data[0].split()[x]    result, email_data = mail.uid('fetch', latest_email_uid, '(RFC822)')    # result, email_data = conn.store(num,'-FLAGS','\\Seen')     # this might work to set flag to seen, if it doesn't already    raw_email = email_data[0][1]    raw_email_string = raw_email.decode('utf-8')    email_message = email.message_from_string(raw_email_string)    # Header Details    date_tuple = email.utils.parsedate_tz(email_message['Date'])    if date_tuple:        local_date = datetime.datetime.fromtimestamp(email.utils.mktime_tz(date_tuple))        local_message_date = "%s" %(str(local_date.strftime("%a, %d %b %Y %H:%M:%S")))    email_from = str(email.header.make_header(email.header.decode_header(email_message['From'])))    email_to = str(email.header.make_header(email.header.decode_header(email_message['To'])))    subject = str(email.header.make_header(email.header.decode_header(email_message['Subject'])))    # Body details    for part in email_message.walk():        if part.get_content_type() == "text/plain":            body = part.get_payload(decode=True)            file_name = "email_" + str(x) + ".txt"            output_file = open(file_name, 'w')            output_file.write("From: %s\nTo: %s\nDate: %s\nSubject: %s\n\nBody: \n\n%s" %(email_from, email_to,local_message_date, subject, body.decode('utf-8')))            output_file.close()        else:            continue