简体   繁体   中英

Unable to download attachments from outlook using Python || Python 3.10

I am trying to download an attachment from outlook with a specific Subject line. It shows finished, but no attachment is getting downloaded. Below attached is my code, kindly help if I am missing something.

# import libraries
import win32com.client
import re
import datetime
import  pathlib2 as pathlib

# set up connection to outlook
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
message = messages.GetFirst()
today_date = str(datetime.date.today())
while True:
  try:
    current_sender = str(message.Sender).lower()
    current_subject = str(message.Subject).lower()
    # find the email from a specific sender with a specific subject
    # condition
    if re.search('AllSalons was executed at',current_subject) != None:
    #if re.search('AllSalons was executed at',current_subject) != None and    re.search(sender_name,current_sender) != None:
      print(current_subject) # verify the subject
      print(current_sender)  # verify the sender
      attachments = message.Attachments
      attachment = attachments.Item(1)
      attachment_name = str(attachment).lower()
      attachment.SaveASFile(pathlib.path + 'C:\\Users\\UserTest\\Desktop\\Folder\\Subject Line\\Nov' + attachment_name)
    else:
      pass
    message = messages.GetNext()
  except:
    message = messages.GetNext()
  break 
print("Finished")

First of all, you need to make sure that a valid file path is passed to the SaveAsFile method of the Attachment class:

attachment.SaveASFile(pathlib.path + 'C:\\Users\\UserTest\\Desktop\\Folder\\Subject Line\\Nov' + attachment_name)

Make sure the folder exists on the disk and the file name doesn't contain forbidden symbols in its name. Windows and Linux don't allow some symbols in file names, see What characters are forbidden in Windows and Linux directory names? for more information.

Second, instead of iterating over all items in the Outlook folder and checking the Subject property value you need to use the Find / FindNext or Restrict methods of the Items class. So, in that case you can deal only with items that correspond to your search criteria and iterate over them. Read more about these methods in the articles that I wrote for the technical blog:

You are concatenating two paths, one of them is aa fully qualified path ( "c:\" ..). The only way it can ever work is if pathlib.path is empty.

Also, replace the line

attachment_name = str(attachment).lower()

with

attachment_name = str(attachment.FileName).lower()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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