How to download outlook attachment from Python Script?

前端 未结 3 1478
走了就别回头了
走了就别回头了 2021-01-05 07:48

I need to download incoming attachment without past attachment from mail using Python Script.

For example:If anyone send mail at this time(now) then just download th

相关标签:
3条回答
  • 2021-01-05 08:11

    The below code helps by downloading the attachments from outlook emails that are

    • 'Unread' (and changes the mail to Read.) or from 'Today's' date.
    • without altering the file name.

    Just pass the 'Subject' argument.

    import datetime
    import os
    import win32com.client
    
    
    path = os.path.expanduser("~/Desktop/Attachments")
    today = datetime.date.today()
    
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    inbox = outlook.GetDefaultFolder(6) 
    messages = inbox.Items
    
    
    def saveattachemnts(subject):
        for message in messages:
            if message.Subject == subject and message.Unread or message.Senton.date() == today:
                # body_content = message.body
                attachments = message.Attachments
                attachment = attachments.Item(1)
                for attachment in message.Attachments:
                    attachment.SaveAsFile(os.path.join(path, str(attachment)))
                    if message.Subject == subject and message.Unread:
                        message.Unread = False
                    break
    
    0 讨论(0)
  • 2021-01-05 08:23

    When I copied this code, I get an error:

    connection = None ^ IndentationError: expected an indented block

    and then, when I indent the code,

    class FetchEmail():
        connection = None
        error = None
        mail_server = "imap.gmail.com"
        username = "dummyoffers@gmail.com"
        password = "opennepo"
        self.save_attachment(self, msg, download_folder)
    

    I get another error:

    self.save_attachment(self, msg, download_folder) NameError: name 'self' is not defined

    import email
    import imaplib
    import os
    
    class FetchEmail():
    
    connection = None
    error = None
    mail_server="host_name"
    username="outlook_username"
    password="password"
    self.save_attachment(self,msg,download_folder)
    def __init__(self, mail_server, username, password):
        self.connection = imaplib.IMAP4_SSL(mail_server)
        self.connection.login(username, password)
        self.connection.select(readonly=False) # so we can mark mails as read
    
    def close_connection(self):
        """
        Close the connection to the IMAP server
        """
        self.connection.close()
    
    def save_attachment(self, msg, download_folder="/tmp"):
        """
        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')
    
            return emails
    
        self.error = "Failed to retreive emails."
        return emails
    

    Above code works for me to download attachment.Hope this really helpful for any one.

    0 讨论(0)
  • 2021-01-05 08:34
    import win32com.client #pip install pypiwin32 to work with windows operating sysytm
    import datetime
    import os
    
    # To get today's date in 'day-month-year' format(01-12-2017).
    dateToday=datetime.datetime.today()
    FormatedDate=('{:02d}'.format(dateToday.day)+'-'+'{:02d}'.format(dateToday.month)+'-'+'{:04d}'.format(dateToday.year))
    
    # Creating an object for the outlook application.
    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    # Creating an object to access Inbox of the outlook.
    inbox=outlook.GetDefaultFolder(6)
    # Creating an object to access items inside the inbox of outlook.
    messages=inbox.Items
    
    def save_attachments(subject,which_item,file_name):
        # To iterate through inbox emails using inbox.Items object.
        for message in messages:
            if (message.Subject == subject):
                body_content = message.body
                # Creating an object for the message.Attachments.
                attachment = message.Attachments
                # To check which item is selected among the attacments.
                print (message.Attachments.Item(which_item))
                # To iterate through email items using message.Attachments object.
                for attachment in message.Attachments:
                    # To save the perticular attachment at the desired location in your hard disk.
                    attachment.SaveAsFile(os.path.join("D:\Script\Monitoring",file_name))
                    break
    
    0 讨论(0)
提交回复
热议问题