Jan-22-2018, 06:15 PM
Hello,
I have a problem when I'm launching my python script to connect to an email address and retrieve the latest attachments of unread emails.
I made my test base on hotmail and outlook addresses and everything works.
Only, after testing with a corporate office address 365, I get the error imaplib.error: login failed.
PS: I use python 2.7
My code:
Kings regards,
I have a problem when I'm launching my python script to connect to an email address and retrieve the latest attachments of unread emails.
I made my test base on hotmail and outlook addresses and everything works.
Only, after testing with a corporate office address 365, I get the error imaplib.error: login failed.
PS: I use python 2.7
My code:
#!/usr/bin/python2.7 import email import imaplib import os class FetchEmail(): connection = None error = None def __init__(self, mail_server, username, password, path): self.connection = imaplib.IMAP4_SSL(mail_server) self.connection.login(username, password) self.connection.select(readonly=False) # so we can mark mails as read msg = self.fetch_unread_messages() for element in msg: pathFile = self.save_attachment(element, path) print pathFile self.close_connection() def close_connection(self): """ Close the connection to the IMAP server """ self.connection.close() def save_attachment(self, msg, download_folder): """ Given a message, save its attachments to the specified download folder (default is /tmp) return: file path to attachment """ att_path = "No attachment found." for part in msg.walk(): if part.get_content_maintype() == 'multipart': continue if part.get('Content-Disposition') is None: continue filename = part.get_filename() att_path = os.path.join(download_folder, filename) if not os.path.isfile(att_path): fp = open(att_path, 'wb') fp.write(part.get_payload(decode=True)) fp.close() return att_path def fetch_unread_messages(self): """ Retrieve unread messages """ emails = [] (result, messages) = self.connection.search(None, 'UnSeen') if result == "OK": for message in messages[0].split(' '): try: ret, data = self.connection.fetch(message,'(RFC822)') except: print ("No new emails to read.") self.close_connection() exit() msg = email.message_from_string(data[0][1]) if isinstance(msg, str) == False: emails.append(msg) #response, data = self.connection.store(message, '+FLAGS','\\Seen') print emails return emails self.error = "Failed to retreive emails." return emails def parse_email_address(self, email_address): """ Helper function to parse out the email address from the message return: tuple (name, address). Eg. ('John Doe', '[email protected]') """ return email.utils.parseaddr(email_address) a = FetchEmail('SMTP.office365.com', 'xxxxxx', 'xxxxxx', 'C:\\Users\\jean.l\\Documents\\Scan') #On entre nos infos de mails iciSomeone have any idea ?
Kings regards,