Skip to content

Instantly share code, notes, and snippets.

@bussiere
Created February 7, 2012 19:49
Show Gist options
  • Save bussiere/1761509 to your computer and use it in GitHub Desktop.
Save bussiere/1761509 to your computer and use it in GitHub Desktop.
How to reclaim your emails and attachment from gmail.
import email, getpass, imaplib, os
detach_dir = '.' # directory where to save attachments (default: current)
#put your username here
user = ""
#put your password here
pwd = ""
# connecting to the gmail imap server
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
m.select("[Gmail]/All Mail") # 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://www.example-code.com/csharp/imap-search-critera.asp)
items = items[0].split() # getting the mails id
i = 0
for emailid in items:
i += 1
if i > 5012 :
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
try :
print "["+mail["From"]+"] :" + mail["Subject"]
except :
try :
print "["+mail["From"]+"] :"
except :
pass
fp = open("%d.txt"%(i), 'wb')
fp.write(mail.__str__())
fp.close()
#Check if any attachments at all
if mail.get_content_maintype() != 'multipart':
continue
# we use walk to create a generator so we can iterate on the parts and forget about the recursive headach
j = 0
for part in mail.walk():
# 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
att_path = att_path.replace("?","")
att_path = att_path.replace("=","")
att_path = att_path.replace(" ","")
att_path = att_path.replace(".\\\\","")
att_path = att_path.replace("\\","")
att_path = att_path.replace("/","")
att_path = ".\\\\"+att_path
try :
if not os.path.isfile(att_path) :
# finally write the stuff
filee = "__%d_%d__"%(i,j)
fp = open("%s"%(att_path+filee+att_path[3:]), 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
if os.path.isfile(att_path):
j += 1
filee = "__%d_%d__"%(i,j)
fp = open("%s"%(att_path+filee+att_path[3:]), 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
except :
pass
@Phlogistique
Copy link

Je suis pas sur de ce que tu veux faire, mais je crois que tu veux utiliser OfflineIMAP.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment