2016-11-28 3 views
2

J'ai le code suivant qui me donne la boîte de réception de mon dossier partagé, et tous les courriels à l'intérieur. Ce code fonctionne très bien et imprimera l'objet du dernier e-mail.Outlook utilisant python win32com pour itérer les sous-dossiers

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 [email protected]'s (comme Sent), mais je ne peux pas les sous-dossiers d'un dossier dans la boîte de réception, ou plus profond que cela. Donc, si je veux recevoir \ subfolder1, comment y accéder? Utiliser Outlook 2013 si cela est important. Mon objectif principal est de faire:

message.Move(inbox\subfolder1) 

Répondre

3

Impossible de faire cela - Outlook met en cache les dossiers par défaut partagés 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 de délégué, vous devez pouvoir analyser le dossier en question en utilisant Namespace.Folders ou Namespace.Stores.

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

+0

Bravo! C'est nul. Merci pour la perspicacité. Malheureusement, je suis limité avec les outils que je peux utiliser, alors j'essayais de trouver un moyen de le faire avec Python. – nico

3

C'est le code que je utilise pour faire une tâche similaire. Ceci trouve les messages dans le dossier "All/Main Folder/Subfolder".

+0

J'adore l'idée pour cela, mais savez-vous comment l'obtenir pour travailler sur une boîte aux lettres partagée? J'ai essayé de définir root_folder égal à outlook.GetSharedDefaultFolder (recip, 6) à partir de mon code initial, mais pas de chance. – nico

+0

@nico Avec ce changement, 'root_folder' a-t-il une propriété' Folders'? Il semblerait que cela définirait la boîte de réception comme 'root_folder' donc un sous-dossier serait trouvé avec' root_folder.Folders ['Subfolder'] '. Sinon, je n'en ai aucune idée, désolé. –

+0

Bien que 'GetSharedDefaultFolder' devrait renvoyer un 'Folder' dont l'API peut être trouvée ici: [Folder API] (https://msdn.microsoft.com/fr-fr/library/office/ff863890.aspx). –

-1

J'ai pris la réponse de Jared Goguen et l'ai modifiée.

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 
inbox = outlook.GetDefaultFolder(6) 
root_folder = inbox.Folders(6) 
messages = root_folder.Items 

inbox.Folders(6) utilise l'index de mon sous-dossier d'intérêt pour l'identifier. J'ai réussi à itérer avec succès les messages dans le sous-dossier en utilisant ce message.

2

Ouais son mieux pour écrire comme le 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) 
0

Sir Tesla. En fait, j'ai suivi votre modèle de code & changez-le selon mon projet actuel. Veuillez trouver ci-dessous le code de l'échantillon.

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 à connaître, une chose. Lorsque nous devons effectuer avec un certain type boîtes aux lettres de fonction puis nous avons juste besoin de mettre le nom sous mapi.Folder [] alors juste aller avec le flux.

Monsieur Tesla votre modèle de code a été utile pour moi au lieu d'utiliser le numéro de dossier .

D'un autre côté, cette technique me permet d'ajouter lire le courrier & prendre des mesures dans un certain laps de temps.

+0

Si vous avez une nouvelle question, posez-la en cliquant sur le bouton [Poser une question] (https://stackoverflow.com/questions/ask). Incluez un lien vers cette question si cela aide à fournir un contexte. - [De l'avis] (/ review/low-quality-posts/18894815) – Shikkediel

+0

S'il vous plaît ne pas ajouter "merci" comme réponse. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation), vous pourrez [voter questions et réponses] (https://stackoverflow.com/help/privileges/vote- up) que vous avez trouvé utile. - [De l'examen] (/ review/low-quality-posts/18894815) – WebDevBooster

+0

Cela ne fournit pas une réponse à la question. Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [De l'examen] (/ review/low-quality-posts/18894815) – NightOwl888