简体   繁体   English

尝试通过 pythonCOM 从 Outlook 保存附件

[英]Trying to save an attachment from outlook via pythonCOM

I am going through my outlook mail to fetch all attachments and save them in my computer.我正在浏览我的 Outlook 邮件以获取所有附件并将它们保存在我的计算机中。

This is my code:这是我的代码:

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()

Now this is the error I get:现在这是我得到的错误:

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)

This is weird because I am admin and I have permissions on the pst and the output folder.这很奇怪,因为我是管理员并且我对 pst 和输出文件夹拥有权限。 I have also tried to run it in a admin CMD and still got the same error.我也尝试在管理员 CMD 中运行它,但仍然出现相同的错误。

btw if you know of a way to get the attachment into a python file object instead of saving it to my computer it will be even better.顺便说一句,如果您知道一种将附件放入 python 文件对象而不是将其保存到我的计算机的方法,那就更好了。

Thanks.谢谢。

You must specify the full attachment file name including the name part.您必须指定完整的附件文件名,包括名称部分。 You are only specifying the directory name, you need to concatenate the directory and file names:您只是指定目录名,您需要连接目录名和文件名:

fileAtt.SaveAsFile(r"C:\Users\Lidor\Desktop\Dina\scan-mail\" + fileAtt.FileName)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM