Trying to save an attachment from outlook via pythonCOM

attachment, com, outlook, python, save

Solution

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)

Problem

I am going through my outlook mail to fetch all attachments and save them in my computer. 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. I have also tried to run it in a admin CMD and still got the same error. 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. Thanks.

Original source