Guest User

Untitled

a guest
May 18th, 2018
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.37 KB | None | 0 0
  1. import imaplib
  2. import email.header
  3. import sys, re
  4. import email
  5. import os
  6. from email.Iterators import typed_subpart_iterator
  7. class getMail(object):
  8. def login(self, username, password):
  9. self.mail = imaplib.IMAP4_SSL('imap.gmail.com')
  10. rc, self.response = self.mail.login(username,password)
  11. return rc
  12.  
  13. def logout(self):
  14. self.mail.expunge()
  15. self.mail.close()
  16. self.mail.logout()
  17.  
  18. def get_all_uid(self):
  19. self.mail.list()
  20. self.mail.select("inbox")
  21. rc, self.response = self.mail.uid('search', None, "ALL")
  22. return self.response[0].split()
  23.  
  24. def fetch_mail(self,uid):
  25. rc, response = self.mail.uid('fetch', uid, '(RFC822)')
  26. raw = response[0][1]
  27. email_message = email.message_from_string(raw)
  28. email_message.get_payload(0).get_payload(decode=True)
  29. return email_message
  30.  
  31. def get_unread_count(self, folder='inbox'):
  32. rc, self.message = self.mail.status(folder, "(UNSEEN)")
  33. unreadCount = re.search("UNSEEN (\d+)", self.message[0]).group(1)
  34. return unreadCount
  35.  
  36. def get_mail_count(self, folder='inbox'):
  37. rc, self.response = self.mail.select(folder)
  38. return self.response[0]
  39.  
  40. def decodeHeaderStr(stringList):
  41. resultStr = ""
  42. for item in stringList:
  43. try:
  44. if item[1] == None:
  45. resultStr += unicode(item[0], 'euc-kr').encode('utf-8')
  46. else:
  47. resultStr += unicode(item[0], item[1]).encode('utf-8')
  48. except:
  49. pass
  50.  
  51. return resultStr
  52.  
  53. def get_att():
  54. detach_dir = '.'
  55. for part in email_message.walk():
  56. if part.get_content_maintype() == 'multipart':
  57. continue
  58. if part.get('Content-Disposition') is None:
  59. continue
  60. filename = part.get_filename()
  61. att_path = os.path.join(detach_dir, filename)
  62. if not os.path.isfile(att_path) :
  63. fp = open(att_path, 'wb')
  64. fp.write(part.get_payload(decode=True))
  65. fp.close()
  66.  
  67. def get_charset(message, default="ascii"):
  68. if message.get_content_charset():
  69. return message.get_content_charset()
  70.  
  71. if message.get_charset():
  72. return message.get_charset()
  73.  
  74. return default
  75.  
  76. def get_body(message):
  77. if message.is_multipart():
  78. #get the plain text version only
  79. text_parts = [part
  80. for part in typed_subpart_iterator(message,
  81. 'text',
  82. 'plain')]
  83. body = []
  84. for part in text_parts:
  85. charset = get_charset(part, get_charset(message))
  86. body.append(unicode(part.get_payload(decode=True),
  87. charset,
  88. "replace"))
  89.  
  90. return u"\n".join(body).strip()
  91.  
  92. else: # if it is not multipart, the payload will be a string
  93. # representing the message body
  94. body = unicode(message.get_payload(decode=True),
  95. get_charset(message),
  96. "replace")
  97. return body.strip()
  98.  
  99. g=getMail()
  100. g.login('', '')
  101. print g.response
  102. print g.get_unread_count()+" New, " +g.get_mail_count()+ " Total Messages."
  103. if g.get_mail_count()<=0:
  104. sys.exit(-1)
  105.  
  106. for item in g.get_all_uid():
  107. print g.fetch_mail(item)['To']
  108. print g.fetch_mail(item)['From']
  109. print g.fetch_mail(item)['Subject']
  110. print ""
  111.  
  112. email_message = email.message_from_string(raw_email)
  113. email_message.get_payload(0).get_payload(decode=True)
  114.  
  115. #print email_message['To']
  116.  
  117. #print email.utils.parseaddr(email_message['From'])
  118.  
  119. #print email_message.items() # print all headers
  120.  
  121. s=email_message['Subject']
  122. print decodeHeaderStr(email.header.decode_header(s))
  123.  
  124.  
  125.  
  126. print get_body(email_message)
  127. #print get_first_text_block,email_message
  128.  
  129.  
  130.  
  131. -----------
  132.  
  133. #!/usr/bin/python
  134. # -*- coding: utf-8 -*-
  135. #
  136. # purgegmail.py
  137. #
  138. # Google mail purge utility
  139. # - delete all mail before purgeDate(datetime.date(2007,11,06))
  140. #
  141. # [2009-11-17 Tue] Jaemok Jeong(jmjeong@gmail.com)
  142. #
  143.  
  144. import imaplib, email, rfc822
  145. import datetime, time
  146. import email.header
  147. import getpass
  148. import sys
  149.  
  150. # add user information
  151. gmail_user = '' # gmail nemustech 계정(jmjeong@nemustech.co.kr)
  152. gmail_pass = '' # gmail nemustech 암호
  153. purgeDate = datetime.date(2008,05,06) # 이 날짜 앞의 메일들은 전부 삭제
  154. verbose = True
  155.  
  156. # constant
  157. gmail_host = 'imap.gmail.com'
  158.  
  159. def decodeHeaderStr(stringList):
  160. resultStr = ""
  161. for item in stringList:
  162. try:
  163. if item[1] == None:
  164. # encoding이 없으면 euc-kr로 간주?
  165. resultStr += unicode(item[0], 'euc-kr').encode('utf-8')
  166. else:
  167. resultStr += unicode(item[0], item[1]).encode('utf-8')
  168. except:
  169. pass
  170.  
  171. return resultStr
  172.  
  173. def process():
  174.  
  175. imap = imaplib.IMAP4_SSL(gmail_host)
  176.  
  177. try:
  178. imap.login(gmail_user, gmail_pass)
  179. except:
  180. print "Login failed"
  181. sys.exit(-1)
  182.  
  183. num = imap.select()
  184.  
  185. searchString = ('(before "%s")' % purgeDate.strftime("%d-%b-%Y"))
  186. type, data = imap.search (None, searchString)
  187.  
  188. y_or_n = raw_input("Delete %d messages? " % len(data[0].split(' ')))
  189. if (not (y_or_n == 'y' or y_or_n == 'Y')): return
  190.  
  191. for num in data[0].split():
  192. imap.store(num, '+FLAGS', '\\Deleted')
  193.  
  194. if verbose:
  195. typ, data = imap.fetch(num, '(BODY[HEADER.FIELDS (FROM SUBJECT DATE)])')
  196.  
  197. emailBody = data[0][1]
  198. mail = email.message_from_string(emailBody)
  199.  
  200. # print "--"
  201. # print ':' + mail['Subject'] + ':'
  202. # print ':' + mail['From'] + ':'
  203. # print ':' + mail['Date'] + ':'
  204. # print "--"
  205.  
  206. try:
  207. subjectStr = email.header.decode_header(mail['Subject'])
  208. fromStr = email.header.decode_header(mail['From'].replace('"', ''))
  209. date = datetime.date.fromtimestamp(time.mktime(rfc822.parsedate(mail['Date'])))
  210. except email.header.HeaderParseError:
  211. print "error"
  212. pass
  213.  
  214. print "Deleted : " + decodeHeaderStr(subjectStr) + ":::" \
  215. + decodeHeaderStr(fromStr) + ":::" + date.strftime("%m-%d-%y")
  216.  
  217. imap.expunge() # permanently remove deleted items
  218.  
  219. imap.close()
  220. imap.logout()
  221.  
  222. if __name__ == '__main__':
  223. if gmail_user == '':
  224. gmail_user = raw_input('id: ')
  225. if gmail_pass == '':
  226. gmail_pass = getpass.getpass()
  227.  
  228. process()
  229. ----------------
  230.  
  231.  
  232. # note that if you want to get text content (body) and the email contains
  233. # multiple payloads (plaintext/ html), you must parse each message separately.
  234. # use something like the following: (taken from a stackoverflow post)
  235. def get_first_text_block(self, email_message_instance):
  236. maintype = email_message_instance.get_content_maintype()
  237. if maintype == 'multipart':
  238. for part in email_message_instance.get_payload():
  239. if part.get_content_maintype() == 'text':
  240. return part.get_payload()
  241. elif maintype == 'text':
  242. return email_message_instance.get_payload()
  243.  
  244.  
  245. def getheader(header_text, default="ascii"):
  246.  
  247. headers = decode_header(header_text)
  248. header_sections = [unicode(text, charset or default)
  249. for text, charset in headers]
  250. return u"".join(header_sections)
Add Comment
Please, Sign In to add comment