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.