Download MMS messages sent to Gmail using Python

So, I tried the code below and it loads the attachments in order. The problem is in my gmail account, there are emails that were sent via MMS via mobile phone. Email attachments from mobile network A can be downloaded using the script below, while those coming from mobile network B do not work.

Here are links to complete information by email: http://pastie.org/private/ektv7yfa2xwdqzu77ys5a (from mobile network A, works) http://pastie.org/private/cljaaad4tz7v5jra20l0q (from mobile network B does not work)

Grabbed from: How to download all emails with attachments from Gmail?

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("[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 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() 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 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() 
+2
source share
1 answer

Failsafe email does not contain the Content-Disposition specified in the headers for the attachment, so you skip it. It looks like you will have to relax the if , which checks the Content-Disposition a bit.

Maybe you could just see if you see the Content-Type image / jpeg and work with it.

+4
source

Source: https://habr.com/ru/post/952691/


All Articles