Last active
November 5, 2023 00:55
-
-
Save amarmeena/cf2a01a04b39dfc875ee30f95c334a51 to your computer and use it in GitHub Desktop.
Python ver3 code to download all the attachments under a gmail label and save them to specified drive location.
This file contains 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
#Original code by Jason: https://gist.github.com/jasonrdsouza/1674794. All the credits to him. This is just my version of it. | |
import email, getpass, imaplib, os | |
detach_dir = os.getcwd() | |
print("Current Working Directory: ", detach_dir) # directory where to save attachments (default: current) | |
user = 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) | |
mlist = m.list() | |
print(mlist) | |
label_directory = input("Copy paste the email directory you want to download attachments from (format e.g. H:\\ABC\\XYZ): ") | |
m.select(label_directory) # 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_bytes(email_body) # parsing the mail content to get a mail object | |
#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 | |
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["Subject"] + "_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() | |
user = 'default' | |
pwd = 'default' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment