IMAPReadEmail
Revision as of 19:58, 25 November 2012 by Andre Castro (talk | contribs) (Created page with "This python script will use imaplib modules to check email in your email account using imap protocol It will also use the email module to parse the email <source lang="pytho...")
This python script will use imaplib modules to check email in your email account using imap protocol It will also use the email module to parse the email
import imaplib, email, json
import datetime
date = (datetime.date.today() - datetime.timedelta(1)).strftime("%d-%b-%Y")
user_email_addr = 'xxx@gmail.com'
user_pwd = 'yyyyy'
inbox={} #dict to store the messages
def imap(addr, pwd):
mail = imaplib.IMAP4_SSL('imap.gmail.com') # will be using IMAP4_SSL , but is also possible to use only IMAP4, for no encryption
mail.login(addr, pwd)
mail.list()#list of "folders" aka labels in gmail.
mail.select("inbox") # connect to inbox.
# SEARCH FOR SPECIFIC MESSAGE MSG
# result, data = mail.uid('search', None, "ALL") #all the mgs
#result, data = mail.uid('search', None, '(HEADER Subject "X") (SENTSINCE {date})'.format(date=date)) #combine subject: X w/ sentsince: today
# result, data = mail.uid('search', None, '(HEADER Subject "test")')
# result, data = mail.uid('search', None, '(HEADER From "your uncle")')
# result, data = mail.uid('search', None, '(UNSEEN)') #unseen msgs
result, data = mail.uid('search', None, '(UNANSWERED)')
for uid in data[0].split():
print
print "UID: "+ str(uid)
result, data = mail.uid('fetch', uid, "(RFC822)") # fetch the email body (RFC822)
raw_email = data[0][1] #the email raw text including headers
# PARSING THE EMAIL
# using email module we can easily parse the email
msg = email.message_from_string(raw_email)
# print msg.items()
msg_id= str(msg['message-id'])
print msg_id
# print "To: "+ str(msg['To'])
msg_from = msg['From']
msg_subject = msg['Subject']
msg_date = msg['Date']
# MULTI-PART / SIMPLE
# an email can be simple of multip part
# if simple it contains only one representation of the content
# if multipart it will contain more than 1 content type (eg: html and plain)
# get_payload will a str if it only has 1 content type (text/plain) or a list of the parts (multipart)
# If multi-part we must "walk" through them in order to access the part(s) we want
payload = msg.get_payload()
if type(payload) is str:
msg_payload = payload
print msg.get_content_type()
elif type(payload) is list:
print msg.get_content_type()
# the walking
for part in msg.walk():
if part.get_content_type() == 'text/plain':
msg_payload = part.get_payload()
inbox[msg_id]=[msg_date, msg_from, msg_subject, msg_payload] # Add to dictionary
mail.close() #close the mailbox
mail.logout() #Shutdown connection to server
dump = json.dumps(inbox, sort_keys=True, indent=4)
print dump
'''
'''
imap(user_email_addr, user_pwd)