Попытка сохранить вложение из Outlook через pythonCOM

Я просматриваю свою почту Outlook, чтобы получить все вложения и сохранить их на своем компьютере.

Это мой код:

import win32com.client
import os, sys

class OutlookLib:

    def __init__(self, settings={}):
        self.settings = settings

    # Gets all messages in outlook   
    def get_messages(self):      
        outlook = win32com.client.Dispatch("Outlook.Application")

        # This allows us to access the "folder" hierarchy accessible within
        # Outlook. You can see this hierarchy yourself by opening Outlook
        # manually and bringing up the folder menu
        # (which typically says "Inbox" or "Outlook Today" or something).
        ns = outlook.GetNamespace("MAPI")

        all_inbox = ns.GetDefaultFolder(6).Items
        return all_inbox

    def get_body(self, msg):
        return msg.Body

    def get_subject(self, msg):
        return msg.Subject

    def get_sender(self, msg):
        return msg.SenderName

    def get_recipient(self, msg):
        return msg.To

    def get_attachments(self, msg):
        return msg.Attachments

# Gets an attachment
# Return true if clean
# Otherwise, return false
def checkAttach(fileAtt):
    pass # TODO something here

def Main():
    global attach

    outlook = OutlookLib()
    messages = outlook.get_messages()

    # Loop all messages
    msg = messages.GetFirst()
    while msg:
        #print msg.Subject
        if not len(msg.Attachments) is 0:
            attach.append((msg.Attachments, msg.Subject))
        msg = messages.GetNext()

    for attachTuple in attach:
        print "Checking attachments under " + attachTuple[1]
        for fileAtt in attachTuple[0]:
            fileAtt.SaveAsFile(r"C:\Users\Lidor\Desktop\Dina\scan-mail")
            if checkAttach(fileAtt):
                print fileAtt.FileName + " was found as malicous."

attach = []

if __name__ == "__main__":
    Main()

Теперь это ошибка, которую я получаю:

Traceback (most recent call last):
  File "C:\Users\Lidor\Desktop\Dina\scan-mail\mailScanner.py", line 67, in <module>
    Main()
  File "C:\Users\Lidor\Desktop\Dina\scan-mail\mailScanner.py", line 60, in Main
    fileAtt.SaveAsFile(r"C:\Users\Lidor\Desktop")
  File "<COMObject <unknown>>", line 2, in SaveAsFile
com_error: (-2147352567, 'Exception occurred.', (4096, u'Microsoft Outlook', u"Cannot save the attachment. You don't have appropriate permission to perform this operation.", None, 0, -2147024891), None)

Это странно, потому что я администратор и у меня есть разрешения на pst и выходную папку. Я также пытался запустить его в административной CMD и все равно получил ту же ошибку.

кстати, если вы знаете способ получить вложение в объект файла python вместо сохранения его на моем компьютере, это будет еще лучше.

Спасибо.


person user3016694    schedule 13.05.2014    source источник


Ответы (1)


Необходимо указать полное имя файла вложения, включая часть имени. Вы указываете только имя каталога, вам нужно объединить имена каталогов и файлов:

fileAtt.SaveAsFile(r"C:\Users\Lidor\Desktop\Dina\scan-mail\" + fileAtt.FileName)
person Dmitry Streblechenko    schedule 13.05.2014
comment
Я получил ту же ошибку, используя Microsoft.Office.Interop.Outlook в С#, и это решение тоже сработало! Спасибо большое. - person Jeff; 04.12.2018