Created
February 7, 2012 19:49
-
-
Save bussiere/1761509 to your computer and use it in GitHub Desktop.
How to reclaim your emails and attachment from gmail.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Je suis pas sur de ce que tu veux faire, mais je crois que tu veux utiliser OfflineIMAP.