Hello
I’m not sure if I can post python related query or not.
If yes pls reply.
This is an email automation related query.
I should download attachments from outlook from a specific sender on a daily basis. I wrote a code but it’s not accessing the outlook.
Can someone help me pls
Hey @shama93
I’m not python expert but I did something similar a while ago.
You can try to modify it to suit your requirements.
import win32com.client
import os
# Set up the Outlook client
# This line creates a connection to the Outlook application using the win32com library.
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# Access the Inbox folder
# '6' refers to the Inbox folder. Outlook folders are identified by specific numbers.
inbox = outlook.GetDefaultFolder(6)
# Define the sender's email address and the path to save attachments
# Email address of the sender whose emails' attachments you want to download.
sender_email = "sender@example.com"
# Path where you want to save the downloaded attachments.
attachment_dir = r"C:\path\to\save\attachments"
# This block checks if the specified path for saving attachments exists. If not, it creates the directory.
if not os.path.exists(attachment_dir):
os.makedirs(attachment_dir)
# This counter keeps track of the number of processed emails.
message_count = 0
# The loop goes through the emails in reverse order (newest first).
for message in reversed(inbox.Items):
# Stop after processing 30 messages
if message_count >= 30:
break
try:
# Check if the message is an email and is unread
# '43' represents olMail. This checks if the message is an email and unread.
if message.Class == 43 and message.UnRead:
# Check if the email is from the specified sender
if message.SenderEmailAddress == sender_email:
# Iterate through and save each attachment
for attachment in message.Attachments:
# Save each attachment to the specified directory
attachment.SaveAsFile(os.path.join(attachment_dir, attachment.FileName))
print(f"Saved attachment: {attachment.FileName}")
# Mark the email as read
message.UnRead = False
# Save the changes to the message
message.Save()
# Increment the message counter
message_count += 1
except AttributeError as error:
# Print any errors encountered
print(f"Error: {error}")
print("Process completed.")
This code is running but not downloading any attachments
Hi @shama93,
import win32com.client
import re
import datetime
# Set up connection to Outlook
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
# Set conditions
sender_email = 'Email ID'
subject_line = 'SUbject Line'
download_folder = r'DOwnload Path'
# Set the specific date to search for emails
message = messages.GetFirst()
while message:
try:
current_sender = str(message.SenderEmailAddress).lower()
current_subject = str(message.Subject).lower()
# Condition: Specific sender, subject, and the specified date
if (current_sender == sender_email.lower() and
current_subject == subject_line.lower()):
print(f"Subject: {current_subject}") # Verify the subject
print(f"Sender: {current_sender}") # Verify the sender
attachments = message.Attachments
for attachment in attachments:
attachment_name = str(attachment.FileName)
attachment.SaveASFile(download_folder + '\\' + attachment_name)
print(f"Downloaded: {attachment_name}")
message = messages.GetNext()
except Exception as e:
print(f"An error occurred: {e}")
message = messages.GetNext()
Try above code, hope it works for you
Regards,
Vinit Mhatre
Thank for your reply, but neither the error nor the output
Could you please share with me your email data Screenshot?
@shama93
I tested it on my environment and it is working fine.
Are you using inbox or any subfolder in mailbox?
I am using Inbox itself