Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. from imaplib import IMAP4_SSL
  2. import email as em
  3. from email.utils import parsedate, parsedate_tz
  4. from email.parser import HeaderParser
  5.  
  6. class GmailAccount(object):
  7. def __init__(self, username=None, password=None, folder=None):
  8. self.username = username
  9. self.password = password
  10. self.folder = folder
  11.  
  12. def login(self):
  13. self.conn = IMAP4_SSL('imap.gmail.com')
  14. response = self.conn.login(self.username, self.password)
  15. return response
  16.  
  17. def search(self, query, folder=None, readonly=False):
  18. ff = self.folder if self.folder else folder
  19. self.conn.select(ff, readonly)
  20. resp, data = self.conn.search(None, query)
  21. return data
  22.  
  23. def fetch(self, uids, query):
  24. uid_arr = b','.join(uids[0].split())
  25. resp, data = self.conn.fetch(uid_arr, query)
  26. return data
  27.  
  28. def fetch_and_parse(self, uids, query):
  29. data = self.fetch(uids, query)
  30. parser = HeaderParser()
  31. emails = []
  32.  
  33. for email in data:
  34. if len(email) < 2:
  35. continue
  36. msg = em.message_from_bytes(email[1]).as_string()
  37. emails.append(parser.parsestr(msg))
  38.  
  39. return emails
  40.  
  41. def load_parse_query(self, search_query, fetch_query, folder=None, readonly=False):
  42. '''Perform search and fetch on an imap Gmail account. After fetching relevant info
  43. from fetch query, parse into a dict-like email object, return list of emails.'''
  44. uids = self.search(search_query, folder, readonly)
  45. return self.fetch_and_parse(uids, fetch_query)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement