web-dev-qa-db-fra.com

Outlook utilisant python win32com pour itérer des sous-dossiers

J'ai le code suivant qui me donne la boîte de réception de mon dossier partagé et tous les courriels qu'il contient. Ce code fonctionne très bien et imprimera le sujet du dernier email. 

Outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
recip = Outlook.CreateRecipient("[email protected]")
inbox = Outlook.GetSharedDefaultFolder(recip, 6)
messages = inbox.Items
message = messages.GetLast()
print (message.Subject)

Je peux accéder à d'autres dossiers parents dans la boîte aux lettres de [email protected] (comme Envoyé), mais je ne peux obtenir aucun sous-dossier d'un dossier dans la boîte de réception ou plus profondément que cela. Donc, si je veux une boîte de réception\sous-dossier1, comment puis-je accéder à cela? Utiliser Outlook 2013 si cela compte. Mon objectif principal est de:

message.Move(inbox\subfolder1)
7
nico

Impossible de le faire - Outlook met en cache les dossiers partagés par défaut dans le fichier OST principal. Les sous-dossiers ne sont pas mis en cache. Si la boîte aux lettres en question est ajoutée en tant que magasin délégué, vous devriez pouvoir analyser le dossier en question à l'aide de Namespace.Folders ou Namespace.Stores.

Sinon, vous pouvez utiliser Redemption et son RDOSession .GetSharedDefaultFolder - le dossier sera ouvert en mode en ligne avec tous ses sous-répertoires ( - RDOFolder .Folders).

3

Ouais c'est mieux de l'écrire comme nom du dossier au lieu d'écrire les numéros de dossier

Comme ma hiérarchie de dossiers est: Outlook_Mails> Boîte de réception> Important

Outlook = win32.com.client.Dispatch("Outlook.Application")
mapi = Outlook.GetNamespace("MAPI")

your_folder = mapi.Folders['Outlook_Mails'].Folders['Inbox'].Folders['Important']
for message in your_folder.Items:
    print(message.Subject)
7
Sir Tesla

C'est le code que j'utilise pour faire une tâche similaire.

Outlook = win32com.client.Dispatch("Outlook.Application")
namespace = Outlook.GetNamespace("MAPI")
root_folder = namespace.Folders.Item(1)
subfolder = root_folder.Folders['All'].Folders['Main Folder'].Folders['Subfolder']
messages = subfolder.Items

Ceci trouve les messages dans le dossier "Tous/Dossier principal/Sous-dossier".

5
Jared Goguen

Sir Tesla . En fait, j'ai suivi votre modèle de code et je l'ai modifié conformément à mon projet actuel. Veuillez trouver le code de spécimen ci-dessous. 

import win32com.client
Outlook = win32com.client.Dispatch("Outlook.application")
mapi = Outlook.GetNamespace("MAPI")
FirstFMB = mapi.Folders['FirstFMB'].Folders['Inbox']
SecondFMB = mapi.Folders['SecondFMB'].Folders['Another_folder']

<Hence other loops & operations as per requirement>

Ici, j'ai appris une chose. Lorsque nous avons besoin de fonctionner avec des boîtes aux lettres de type Function , nous devons simplement placer le nom sous mapi.Folder [] puis suivre le flux. 

Monsieur Tesla votre modèle de code m'a été utile au lieu d'utiliser Numéro de dossier

D'un autre côté, cette technique m'aide à annexer la lecture et la prise en compte du courrier dans un certain délai. 

0
Ozzius