Rev 1132 | Blame | Compare with Previous | Last modification | View Log | RSS feed
import emailimport imaplibimport osdef download_attachment(subject, date):detach_dir = '.' # directory where to save attachments (default: current)user = 'cnc.center@shop2020.in'pwd = '5h0p2o2o'# connecting to the gmail imap serverm = imaplib.IMAP4_SSL("imap.gmail.com")m.login(user,pwd)m.select("Inbox", True) # use m.list() to get all the mailboxes# you could filter using the IMAP rules here (check http://www.example-code.com/csharp/imap-search-critera.asp)resp, items = m.search(None, 'SUBJECT', subject, 'UNKEYWORD', 'processed')items = items[0].split() # getting the mail idsattachment_path = Nonefor emailid in reversed(items):# fetching the mail, "`(RFC822)`" means "get the whole stuff", but you can ask for headers only, etcresp, data = m.fetch(emailid, "(RFC822)")email_body = data[0][1] # getting the mail contentmail = email.message_from_string(email_body) # parsing the mail content to get a mail object#Check if any attachments at allif mail.get_content_maintype() != 'multipart':continueprint "["+mail["From"]+"] :" + mail["Subject"] + ":" + mail["Date"]# we use walk to create a generator so we can iterate on the parts and forget about the recursive headachfor part in mail.walk():# multipart are just containers, so we skip themif part.get_content_maintype() == 'multipart':continue# is this part an attachment ?if part.get('Content-Disposition') is None:continuefilename = part.get_filename()counter = 1# if there is no filename, we create one with a counter to avoid duplicatesif not filename:filename = 'part-%03d%s' % (counter, 'bin')counter += 1attachment_path = os.path.join(detach_dir, filename)#Check if its already thereif not os.path.isfile(attachment_path) :# finally write the stufffp = open(attachment_path, 'wb')fp.write(part.get_payload(decode=True))fp.close()#We are only expecting a single email per day with a given subject.breaktry:m.select("Inbox", False)m.store(','.join(items), 'FLAGS', 'processed')except:passreturn attachment_path