-
-
Save rlouf/f79998e571ca22668fd42a66bb1cbc5c to your computer and use it in GitHub Desktop.
Python script to access a gmail account and download particular emails
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) | |
user = raw_input("Enter your GMail username:") | |
pwd = getpass.getpass("Enter your password: ") | |
# connecting to the gmail imap server | |
m = imaplib.IMAP4_SSL("imap.gmail.com") | |
m.login(user,pwd) | |
m.select("cs2043") # 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 | |
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 headach | |
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() | |
filename = mail["From"] + "_hw1answer" | |
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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment