import  email ,  getpass ,  imaplib ,  os ,  re ,  csv ,  zipfile ,  glob ,  threading 
 
detach_dir =  'C:\d irectory'  # directory where to save attachments (default: current) 
user  =  ( "username" ) 
pwd  =  ( "pass" ) 
 
# connecting to the gmail imap server 
m =  imaplib .IMAP4_SSL ( "imap.gmail.com" ) 
m.login ( user , pwd ) 
m.select ( "INBOX" )  # here you a can choose a mail box like INBOX instead 
# use m.list() to get all the mailboxes 
 
resp,  items =  m.search ( None ,  "ALL" )  # you could filter using the IMAP rules here (check http://w...content-available-to-author-only...e.com/csharp/imap-search-critera.asp) 
items =  items[ 0 ] .split ( )  # getting the mails id 
 
for  emailid in  items:
    resp,  data =  m.fetch ( emailid,  "(RFC822)" )  # fetching the mail, "`(RFC822)`" means "get the whole stuff", but you can ask for headers only, etc 
    email_body =  data[ 0 ] [ 1 ]  # getting the mail content 
    mail =  email .message_from_string ( email_body)  # parsing the mail content to get a mail object 
 
 
    #Check if any attachments at all 
    if  mail.get_content_maintype ( )  !=  'multipart' :
        continue 
 
    #print "["+mail["From"]+"] :" + mail["Subject"] 
 
    # we use walk to create a generator so we can iterate on the parts and forget about the recursive headache 
    for  part in  mail.walk ( ) :
        # each part is a either non-multipart, or another multipart message 
        # that contains further parts... Message is organized like a tree 
        if  part.get_content_type ( )  ==  'text/plain' :
            content =  part.get_payload ( ) 
            message =  re .compile ( r'\% (.+?)\% ' ,  re .DOTALL ) .findall ( content) 
            message =  re .sub ( r'=\\ r\\ ' ,  '' ,  str ( message) ) 
            message =  re .sub ( r'\[ \' ' ,  '' ,  str ( message) ) 
            message =  re .sub ( r'\' \] ' ,  '' ,  str ( message) ) 
            token  =  re .compile ( r'\$ (.+?)\$ ' ,  re .DOTALL ) .findall ( content) 
            token  =  re .sub ( r'\[ \' ' ,  '' ,  str ( token ) ) 
            token  =  re .sub ( r'\' \] ' ,  '' ,  str ( token ) ) 
            tag =  re .compile ( r'\^ (.+?)\^ ' ,  re .DOTALL ) .findall ( content) 
            tag =  re .sub ( r'\[ \' ' ,  '' ,  str ( tag) ) 
            tag =  re .sub ( r'\' \] ' ,  '' ,  str ( tag) ) 
            print  message
            print  token 
            print  tag
            #print part.get_payload() # prints the raw text 
        # multipart are just containers, so we skip them 
        if  part.get_content_maintype ( )  ==  'multipart' :
            continue 
 
        # is this part an attachment ? 
        if  part.get ( 'Content-Disposition' )  is  None :
            continue 
 
        filename =  part.get_filename ( ) 
        counter =  1 
 
        # if there is no filename, we create one with a counter to avoid duplicates 
        if  not  filename:
            filename =  'part-%03d%s'  % ( counter,  'bin' ) 
            counter +=  1 
 
        att_path =  os .path .join ( detach_dir,  filename) 
 
        #Check if its already there 
        if  not  os .path .isfile ( att_path)  :
            # finally write the stuff 
            fp =  open ( att_path,  'wb' ) 
            fp.write ( part.get_payload ( decode= True ) ) 
            fp.close ( ) 
 
        path =  detach_dir
        os .chdir ( path) 
        image1 =  str ( glob .glob ( 'upload-photo1*' ) ) 
        image2 =  str ( glob .glob ( 'upload-photo2*' ) ) 
        image3 =  str ( glob .glob ( 'upload-photo3*' ) ) 
        image1 =  re .sub ( r'\[ \' ' ,  '' ,  image1) 
        image1 =  re .sub ( r'\' \] ' ,  '' ,  image1) 
        image2 =  re .sub ( r'\[ \' ' ,  '' ,  image2) 
        image2 =  re .sub ( r'\' \] ' ,  '' ,  image2) 
        image3 =  re .sub ( r'\[ \' ' ,  '' ,  image3) 
        image3 =  re .sub ( r'\' \] ' ,  '' ,  image3) 
        htmlFile =  str ( token ) +'.html' 
        htmlCode =  ( '''<html>foo bar</html>''' ) 
        htmlData =  open ( os .path .join ( 'C:\d irectory' ,  htmlFile) ,  'w+' ) 
        htmlData.write ( htmlCode) 
        print  htmlFile+' Complete' 
        htmlData.close ( ) 
        allFiles =  [ f for  f in  os .listdir ( '.' ) ] 
        for  file  in  allFiles:
            archive =  zipfile .ZipFile ( token +'.zip' ,  mode= 'a' ) 
            archive.write ( file ) 
            archive.close ( ) 
            os .unlink ( file ) 
 
				aW1wb3J0IGVtYWlsLCBnZXRwYXNzLCBpbWFwbGliLCBvcywgcmUsIGNzdiwgemlwZmlsZSwgZ2xvYiwgdGhyZWFkaW5nCgpkZXRhY2hfZGlyID0gJ0M6XGRpcmVjdG9yeScgIyBkaXJlY3Rvcnkgd2hlcmUgdG8gc2F2ZSBhdHRhY2htZW50cyAoZGVmYXVsdDogY3VycmVudCkKdXNlciA9ICgidXNlcm5hbWUiKQpwd2QgPSAoInBhc3MiKQoKIyBjb25uZWN0aW5nIHRvIHRoZSBnbWFpbCBpbWFwIHNlcnZlcgptID0gaW1hcGxpYi5JTUFQNF9TU0woImltYXAuZ21haWwuY29tIikKbS5sb2dpbih1c2VyLHB3ZCkKbS5zZWxlY3QoIklOQk9YIikgIyBoZXJlIHlvdSBhIGNhbiBjaG9vc2UgYSBtYWlsIGJveCBsaWtlIElOQk9YIGluc3RlYWQKIyB1c2UgbS5saXN0KCkgdG8gZ2V0IGFsbCB0aGUgbWFpbGJveGVzCgpyZXNwLCBpdGVtcyA9IG0uc2VhcmNoKE5vbmUsICJBTEwiKSAjIHlvdSBjb3VsZCBmaWx0ZXIgdXNpbmcgdGhlIElNQVAgcnVsZXMgaGVyZSAoY2hlY2sgaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY29tL2NzaGFycC9pbWFwLXNlYXJjaC1jcml0ZXJhLmFzcCkKaXRlbXMgPSBpdGVtc1swXS5zcGxpdCgpICMgZ2V0dGluZyB0aGUgbWFpbHMgaWQKCmZvciBlbWFpbGlkIGluIGl0ZW1zOgogICAgcmVzcCwgZGF0YSA9IG0uZmV0Y2goZW1haWxpZCwgIihSRkM4MjIpIikgIyBmZXRjaGluZyB0aGUgbWFpbCwgImAoUkZDODIyKWAiIG1lYW5zICJnZXQgdGhlIHdob2xlIHN0dWZmIiwgYnV0IHlvdSBjYW4gYXNrIGZvciBoZWFkZXJzIG9ubHksIGV0YwogICAgZW1haWxfYm9keSA9IGRhdGFbMF1bMV0gIyBnZXR0aW5nIHRoZSBtYWlsIGNvbnRlbnQKICAgIG1haWwgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKGVtYWlsX2JvZHkpICMgcGFyc2luZyB0aGUgbWFpbCBjb250ZW50IHRvIGdldCBhIG1haWwgb2JqZWN0CgoKICAgICNDaGVjayBpZiBhbnkgYXR0YWNobWVudHMgYXQgYWxsCiAgICBpZiBtYWlsLmdldF9jb250ZW50X21haW50eXBlKCkgIT0gJ211bHRpcGFydCc6CiAgICAgICAgY29udGludWUKCiAgICAjcHJpbnQgIlsiK21haWxbIkZyb20iXSsiXSA6IiArIG1haWxbIlN1YmplY3QiXQoKICAgICMgd2UgdXNlIHdhbGsgdG8gY3JlYXRlIGEgZ2VuZXJhdG9yIHNvIHdlIGNhbiBpdGVyYXRlIG9uIHRoZSBwYXJ0cyBhbmQgZm9yZ2V0IGFib3V0IHRoZSByZWN1cnNpdmUgaGVhZGFjaGUKICAgIGZvciBwYXJ0IGluIG1haWwud2FsaygpOgogICAgICAgICMgZWFjaCBwYXJ0IGlzIGEgZWl0aGVyIG5vbi1tdWx0aXBhcnQsIG9yIGFub3RoZXIgbXVsdGlwYXJ0IG1lc3NhZ2UKICAgICAgICAjIHRoYXQgY29udGFpbnMgZnVydGhlciBwYXJ0cy4uLiBNZXNzYWdlIGlzIG9yZ2FuaXplZCBsaWtlIGEgdHJlZQogICAgICAgIGlmIHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpID09ICd0ZXh0L3BsYWluJzoKICAgICAgICAgICAgY29udGVudCA9IHBhcnQuZ2V0X3BheWxvYWQoKQogICAgICAgICAgICBtZXNzYWdlID0gcmUuY29tcGlsZShyJ1wlKC4rPylcJScsIHJlLkRPVEFMTCkuZmluZGFsbChjb250ZW50KQogICAgICAgICAgICBtZXNzYWdlID0gcmUuc3ViKHInPVxcclxcJywgJycsIHN0cihtZXNzYWdlKSkKICAgICAgICAgICAgbWVzc2FnZSA9IHJlLnN1YihyJ1xbXCcnLCAnJywgc3RyKG1lc3NhZ2UpKQogICAgICAgICAgICBtZXNzYWdlID0gcmUuc3ViKHInXCdcXScsICcnLCBzdHIobWVzc2FnZSkpCiAgICAgICAgICAgIHRva2VuID0gcmUuY29tcGlsZShyJ1wkKC4rPylcJCcsIHJlLkRPVEFMTCkuZmluZGFsbChjb250ZW50KQogICAgICAgICAgICB0b2tlbiA9IHJlLnN1YihyJ1xbXCcnLCAnJywgc3RyKHRva2VuKSkKICAgICAgICAgICAgdG9rZW4gPSByZS5zdWIocidcJ1xdJywgJycsIHN0cih0b2tlbikpCiAgICAgICAgICAgIHRhZyA9IHJlLmNvbXBpbGUocidcXiguKz8pXF4nLCByZS5ET1RBTEwpLmZpbmRhbGwoY29udGVudCkKICAgICAgICAgICAgdGFnID0gcmUuc3ViKHInXFtcJycsICcnLCBzdHIodGFnKSkKICAgICAgICAgICAgdGFnID0gcmUuc3ViKHInXCdcXScsICcnLCBzdHIodGFnKSkKICAgICAgICAgICAgcHJpbnQgbWVzc2FnZQogICAgICAgICAgICBwcmludCB0b2tlbgogICAgICAgICAgICBwcmludCB0YWcKICAgICAgICAgICAgI3ByaW50IHBhcnQuZ2V0X3BheWxvYWQoKSAjIHByaW50cyB0aGUgcmF3IHRleHQKICAgICAgICAjIG11bHRpcGFydCBhcmUganVzdCBjb250YWluZXJzLCBzbyB3ZSBza2lwIHRoZW0KICAgICAgICBpZiBwYXJ0LmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CiAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICMgaXMgdGhpcyBwYXJ0IGFuIGF0dGFjaG1lbnQgPwogICAgICAgIGlmIHBhcnQuZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJykgaXMgTm9uZToKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgZmlsZW5hbWUgPSBwYXJ0LmdldF9maWxlbmFtZSgpCiAgICAgICAgY291bnRlciA9IDEKCiAgICAgICAgIyBpZiB0aGVyZSBpcyBubyBmaWxlbmFtZSwgd2UgY3JlYXRlIG9uZSB3aXRoIGEgY291bnRlciB0byBhdm9pZCBkdXBsaWNhdGVzCiAgICAgICAgaWYgbm90IGZpbGVuYW1lOgogICAgICAgICAgICBmaWxlbmFtZSA9ICdwYXJ0LSUwM2QlcycgJSAoY291bnRlciwgJ2JpbicpCiAgICAgICAgICAgIGNvdW50ZXIgKz0gMQoKICAgICAgICBhdHRfcGF0aCA9IG9zLnBhdGguam9pbihkZXRhY2hfZGlyLCBmaWxlbmFtZSkKCiAgICAgICAgI0NoZWNrIGlmIGl0cyBhbHJlYWR5IHRoZXJlCiAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGF0dF9wYXRoKSA6CiAgICAgICAgICAgICMgZmluYWxseSB3cml0ZSB0aGUgc3R1ZmYKICAgICAgICAgICAgZnAgPSBvcGVuKGF0dF9wYXRoLCAnd2InKQogICAgICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAKICAgICAgICBwYXRoID0gZGV0YWNoX2RpcgogICAgICAgIG9zLmNoZGlyKHBhdGgpCiAgICAgICAgaW1hZ2UxID0gc3RyKGdsb2IuZ2xvYigndXBsb2FkLXBob3RvMSonKSkKICAgICAgICBpbWFnZTIgPSBzdHIoZ2xvYi5nbG9iKCd1cGxvYWQtcGhvdG8yKicpKQogICAgICAgIGltYWdlMyA9IHN0cihnbG9iLmdsb2IoJ3VwbG9hZC1waG90bzMqJykpCiAgICAgICAgaW1hZ2UxID0gcmUuc3ViKHInXFtcJycsICcnLCBpbWFnZTEpCiAgICAgICAgaW1hZ2UxID0gcmUuc3ViKHInXCdcXScsICcnLCBpbWFnZTEpCiAgICAgICAgaW1hZ2UyID0gcmUuc3ViKHInXFtcJycsICcnLCBpbWFnZTIpCiAgICAgICAgaW1hZ2UyID0gcmUuc3ViKHInXCdcXScsICcnLCBpbWFnZTIpCiAgICAgICAgaW1hZ2UzID0gcmUuc3ViKHInXFtcJycsICcnLCBpbWFnZTMpCiAgICAgICAgaW1hZ2UzID0gcmUuc3ViKHInXCdcXScsICcnLCBpbWFnZTMpCiAgICAgICAgaHRtbEZpbGUgPSBzdHIodG9rZW4pKycuaHRtbCcKICAgICAgICBodG1sQ29kZSA9ICgnJyc8aHRtbD5mb28gYmFyPC9odG1sPicnJykKICAgICAgICBodG1sRGF0YSA9IG9wZW4ob3MucGF0aC5qb2luKCdDOlxkaXJlY3RvcnknLCBodG1sRmlsZSksICd3KycpCiAgICAgICAgaHRtbERhdGEud3JpdGUoaHRtbENvZGUpCiAgICAgICAgcHJpbnQgaHRtbEZpbGUrJyBDb21wbGV0ZScKICAgICAgICBodG1sRGF0YS5jbG9zZSgpCiAgICAgICAgYWxsRmlsZXMgPSBbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKCcuJyldCiAgICAgICAgZm9yIGZpbGUgaW4gYWxsRmlsZXM6CiAgICAgICAgICAgIGFyY2hpdmUgPSB6aXBmaWxlLlppcEZpbGUodG9rZW4rJy56aXAnLCBtb2RlPSdhJykKICAgICAgICAgICAgYXJjaGl2ZS53cml0ZShmaWxlKQogICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKICAgICAgICAgICAgb3MudW5saW5rKGZpbGUp