Skip to content

Instantly share code, notes, and snippets.

@hdary85
Last active November 9, 2023 04:21
Show Gist options
  • Save hdary85/fecc16d92597a3cd67fa5b75df4b8e3f to your computer and use it in GitHub Desktop.
Save hdary85/fecc16d92597a3cd67fa5b75df4b8e3f to your computer and use it in GitHub Desktop.
import win32com.client
import pandas as pd
import io
from datetime import datetime
# Connect to Outlook
outlook = win32com.client.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")
# Recherche du dossier principal par son nom
main_folder_name = "NomDuDossierPrincipal" # Remplacez "NomDuDossierPrincipal" par le nom du dossier principal
main_folder = None
for folder in namespace.Folders:
if folder.Name == main_folder_name:
main_folder = folder
break
if main_folder:
# Vous avez trouvé le dossier principal, vous pouvez maintenant y accéder.
# Recherche du premier sous-dossier par son nom
first_sub_folder_name = "NomDuPremierSousDossier" # Remplacez "NomDuPremierSousDossier" par le nom du premier sous-dossier
first_sub_folder = None
for folder in main_folder.Folders:
if folder.Name == first_sub_folder_name:
first_sub_folder = folder
break
if first_sub_folder:
# Vous avez trouvé le premier sous-dossier, vous pouvez maintenant y accéder.
# Recherche du deuxième sous-dossier par son nom
second_sub_folder_name = "NomDuDeuxiemeSousDossier" # Remplacez "NomDuDeuxiemeSousDossier" par le nom du deuxième sous-dossier
second_sub_folder = None
for folder in first_sub_folder.Folders:
if folder.Name == second_sub_folder_name:
second_sub_folder = folder
break
if second_sub_folder:
# Vous avez trouvé le deuxième sous-dossier, vous pouvez maintenant y accéder
dataframes = []
# Define the date range for filtering emails
start_date = datetime(2023, 1, 1) # Replace with your start date
end_date = datetime(2023, 12, 31) # Replace with your end date
# Define the date format for the Restrict method
date_format = "%Y-%m-%d"
# Format the start and end dates
start_date_str = start_date.strftime(date_format)
end_date_str = end_date.strftime(date_format)
# Filter emails based on received time
filter_str = f"[ReceivedTime] >= '{start_date_str}' AND [ReceivedTime] <= '{end_date_str}'"
filtered_emails = second_sub_folder.Items.Restrict(filter_str)
# Itérer à travers les filtered_emails
for email in filtered_emails:
for attachment in email.Attachments:
if attachment.FileName.endswith(".csv"):
attachment_data = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37010102")
attachment_data = attachment_data.encode("utf-8")
attachment_data = io.BytesIO(attachment_data)
# Read the CSV content into a DataFrame
df = pd.read_csv(attachment_data)
dataframes.append(df)
# Print sender, subject, and received time for each email
print(f"Sender: {email.SenderName}")
print(f"Subject: {email.Subject}")
print(f"Received Time: {email.ReceivedTime}")
# Concatenate all DataFrames into one
combined_df = pd.concat(dataframes, ignore_index=True)
# Now you have the combined DataFrame for emails received within the specified date range.
print(combined_df)
else:
print(f"Deuxième sous-dossier '{second_sub_folder_name}' non trouvé dans '{first_sub_folder_name}'.")
else:
print(f"Premier sous-dossier '{first_sub_folder_name}' non trouvé dans '{main_folder_name}'.")
else:
print(f"Dossier principal '{main_folder_name}' non trouvé dans Outlook.")
import win32com.client
import pandas as pd
import io
from datetime import datetime
# Connect to Outlook
outlook = win32com.client.Dispatch("Outlook.Application")
namespace = outlook.GetNamespace("MAPI")
# Recherche du dossier principal par son nom
main_folder_name = "NomDuDossierPrincipal" # Remplacez "NomDuDossierPrincipal" par le nom du dossier principal
main_folder = None
for folder in namespace.Folders:
if folder.Name == main_folder_name:
main_folder = folder
break
if main_folder:
# Vous avez trouvé le dossier principal, vous pouvez maintenant y accéder.
# Recherche du premier sous-dossier par son nom
first_sub_folder_name = "NomDuPremierSousDossier" # Remplacez "NomDuPremierSousDossier" par le nom du premier sous-dossier
first_sub_folder = None
for folder in main_folder.Folders:
if folder.Name == first_sub_folder_name:
first_sub_folder = folder
break
if first_sub_folder:
# Vous avez trouvé le premier sous-dossier, vous pouvez maintenant y accéder.
# Recherche du deuxième sous-dossier par son nom
second_sub_folder_name = "NomDuDeuxiemeSousDossier" # Remplacez "NomDuDeuxiemeSousDossier" par le nom du deuxième sous-dossier
second_sub_folder = None
for folder in first_sub_folder.Folders:
if folder.Name == second_sub_folder_name:
second_sub_folder = folder
break
if second_sub_folder:
# Vous avez trouvé le deuxième sous-dossier, vous pouvez maintenant y accéder
dataframes = []
# Define the date range for filtering emails
start_date = datetime(2023, 1, 1) # Replace with your start date
end_date = datetime(2023, 12, 31) # Replace with your end date
# Define the date format for the Restrict method
date_format = "%Y-%m-%d"
# Format the start and end dates
start_date_str = start_date.strftime(date_format)
end_date_str = end_date.strftime(date_format)
# Filter emails based on received time
filter_str = f"[ReceivedTime] >= '{start_date_str}' AND [ReceivedTime] <= '{end_date_str}'"
filtered_emails = second_sub_folder.Items.Restrict(filter_str)
# Itérer à travers les filtered_emails
for email in filtered_emails:
if email.Attachments.Count > 0:
for attachment in email.Attachments:
if attachment.FileName.endswith(".csv"):
attachment_content = attachment.Content
attachment_data = io.StringIO(attachment_content)
df = pd.read_csv(attachment_data)
dataframes.append(df)
# Print sender, subject, and received time for each email
print(f"Sender: {email.SenderName}")
print(f"Subject: {email.Subject}")
print(f"Received Time: {email.ReceivedTime}")
# Concatenate all DataFrames into one
combined_df = pd.concat(dataframes, ignore_index=True)
# Now you have the combined DataFrame for emails received within the specified date range.
print(combined_df)
else:
print(f"Deuxième sous-dossier '{second_sub_folder_name}' non trouvé dans '{first_sub_folder_name}'.")
else:
print(f"Premier sous-dossier '{first_sub_folder_name}' non trouvé dans '{main_folder_name}'.")
else:
print(f"Dossier principal '{main_folder_name}' non trouvé dans Outlook.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment