-
-
Save baali/2633554 to your computer and use it in GitHub Desktop.
# Something in lines of http://stackoverflow.com/questions/348630/how-can-i-download-all-emails-with-attachments-from-gmail | |
# Make sure you have IMAP enabled in your gmail settings. | |
# Right now it won't download same file name twice even if their contents are different. | |
import email | |
import getpass, imaplib | |
import os | |
import sys | |
detach_dir = '.' | |
if 'attachments' not in os.listdir(detach_dir): | |
os.mkdir('attachments') | |
userName = raw_input('Enter your GMail username:') | |
passwd = getpass.getpass('Enter your password: ') | |
try: | |
imapSession = imaplib.IMAP4_SSL('imap.gmail.com') | |
typ, accountDetails = imapSession.login(userName, passwd) | |
if typ != 'OK': | |
print 'Not able to sign in!' | |
raise | |
imapSession.select('[Gmail]/All Mail') | |
typ, data = imapSession.search(None, 'ALL') | |
if typ != 'OK': | |
print 'Error searching Inbox.' | |
raise | |
# Iterating over all emails | |
for msgId in data[0].split(): | |
typ, messageParts = imapSession.fetch(msgId, '(RFC822)') | |
if typ != 'OK': | |
print 'Error fetching mail.' | |
raise | |
emailBody = messageParts[0][1] | |
mail = email.message_from_string(emailBody) | |
for part in mail.walk(): | |
if part.get_content_maintype() == 'multipart': | |
# print part.as_string() | |
continue | |
if part.get('Content-Disposition') is None: | |
# print part.as_string() | |
continue | |
fileName = part.get_filename() | |
if bool(fileName): | |
filePath = os.path.join(detach_dir, 'attachments', fileName) | |
if not os.path.isfile(filePath) : | |
print fileName | |
fp = open(filePath, 'wb') | |
fp.write(part.get_payload(decode=True)) | |
fp.close() | |
imapSession.close() | |
imapSession.logout() | |
except : | |
print 'Not able to download all attachments.' |
I am using Python 3.5 and found I needed to use
mail = email.message_from_bytes(emailBody) # instead of mail = email.message_from_string(emailBody)
to get it working.
How to authenticate office365 and microsoft accounts through python
Anyone got it working for gmx.com? (I don't use google)
If anyone modified it to work it with gmx.com, please share :-)
Just changing form:
imapSession = imaplib.IMAP4_SSL('imap.gmail.com')
to
imapSession = imaplib.IMAP4_SSL('imap.gmx.com')
didn't work
hi, i have this error
Not able to download all attachments.
change in line 38 UTF-8
change in line 25 'UNSEEN FROM "XXX@gmail.com"'
but continue this error
Not able to download all attachments.
For anyone else who stumbled upon this:
- If you want a label, change line 24 to read
res = imapSession.select('<label_here>')
- Create an "app specific password" for gmail in your general google account settings
- Make sure your python is version 2, or be prepared to make changes
It does not work, and I dont have idea why.
Even this code is working well
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login("Name1", "passwrd")
msg = "HEj"
server.sendmail("Name1", "Name2", msg)
server.quit()
So it should means that gmail is set up well
Guys can I ask how you can download attachment from specific person?
What code do I add?
Thank you
I'm using it with python 3.6 and it works fine with just a few adjustments:
- line 14 change "raw_input" to "input"
- line 24 change "[Gmail]/All Mail" to "inbox" (or whatever label you want)
- line 38 change "email.message_from_string" to "email.message_from_bytes"
I cannot get this to work.
Ihave done gmail / inbox
string / bytes
etc.
I find the right emails and all of that but still nothing.
get_payload does not seem to do anything.
Suggestions?
Thank you.
Anyone got this to work with gmail recently? Keen on something like this
how to filter by date?
how to change line 38? so it will support UTF-8?
@lewisde how to change line 38? so it will support UTF-8?
Anyone got this to work with gmail recently? Keen on something like this
Done
keep getting raise EOF parsing error on python 3,X
Works on Python 3.7 with several changes:
Line 38: mail = email.message_from_bytes(emailBody)
changed the raises to raise Exception("Not able to sign in!"), raise Exception("Error searching Inbox.") and raise Exception("Error fetching mail.")
Line 18: imapSession = imaplib.IMAP4_SSL('imap.gmail.com')
changed userName = input('Enter your GMail username:') to userName = "XXXXXX@gmail.com"
changed passwd = getpass.getpass('Enter your password: ') to passwd = " "xxxx xxxx xxxx xxxx" (had to get an application specific password for this to work. My Gmail password would not work.)
changed detach_dir to .\picture folder/Email Attachments/ to keep the attachments from being saved to current path
A working script thanks to @baali - https://gist.github.com/kngeno/5337e543eb72174a6ac95e028b3b6456
Amazing Working Script Thanks To @baali
Easier and updated script:
https://gist.github.com/x011/d6c346debe22f5fec9e4499643ae1050
Dears
usful code to check old pictures, thanks, however
When I ran the code it printed the email username and did not do anything more.
This is awesome! Thank you
Hi,
Does anyone find this repo working? I think I am stuck with the login that throws me exception
typ, accountDetails = imapSession.login(userName, passed)
can anyone help?
thank you
Hi @chaohuichen,
Have you tried this? https://gist.github.com/kngeno/5337e543eb72174a6ac95e028b3b6456
Also from @x011on flagging particular emails
https://gist.github.com/x011/d6c346debe22f5fec9e4499643ae1050
Hi,
Does anyone find this repo working? I think I am stuck with the login that throws me exceptiontyp, accountDetails = imapSession.login(userName, passed)
can anyone help?
thank you
Hi @chaohuichen,
Have you tried this? https://gist.github.com/kngeno/5337e543eb72174a6ac95e028b3b6456
Also from @x011on flagging particular emails
https://gist.github.com/x011/d6c346debe22f5fec9e4499643ae1050Hi,
Does anyone find this repo working? I think I am stuck with the login that throws me exception
typ, accountDetails = imapSession.login(userName, passed)
can anyone help?
thank you
Thank you @kngeno. the second gist link works!
Trying this in 2022 and always getting the 'Not able to download all attachments.' error. I read that in May 2022 google does not give the options to allow access to less secure apps, which fixed the problem for other users here. Does anyone know how to make this work in 2022?
Any help is much appreciated. Thanks!
Trying this in 2022 and always getting the 'Not able to download all attachments.' error. I read that in May 2022 google does not give the options to allow access to less secure apps, which fixed the problem for other users here. Does anyone know how to make this work in 2022?
Any help is much appreciated. Thanks!
If mail is something like test@test.com
Less secured app option is still available
For mails like anything@gmail.com you should use "app password"
Thanks for the reply! For App password, would I just use it in place of the regular password in the script above?
I tried that but am still getting the same issue.
How to authenticate hotmail and live accounts .Please give me an example.
Thanks