J'essaie de mieux comprendre l'interaction Outlook via win32com. Je n'ai pas pu trouver de documentation claire qui me permette d'utiliser win32com pour lire efficacement les e-mails, d'après mon enquête actuelle, cela semble être un sentiment assez régulier de la part des utilisateurs. Ainsi viennent les informations et demandes suivantes:
Quelqu'un pourrait-il;
1. Donnez un lien vers l'emplacement de la documentation claire (si elle existe)
2. Développez ce qui suit
Vous trouverez ci-dessous les fonctionnalités actuelles que j'ai trouvées en lisant le code d'autres personnes.
Prenez le code ci-dessous:
import win32com
Outlook=win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox=Outlook.GetDefaultFolder(6)
messages=inbox.Items
for message in messages:
attachments = message.attachments
for attachment in attachments:
pass
Les objets utilisés ci-dessus ont les fonctionnalités suivantes que je connais:
boîte de réception -
.Folders
.Items
messages -
.GetFirst()
.GetLast()
.GetNext()
.GetPrevious()
.Attachments
message -
.Subject
.Body
.To
.Recipients
.Sender
.Sender.Address
pièces jointes -
.item()
.Count
attachement -
.filename
Si vous connaissez d'autres fonctionnalités, veuillez les ajouter dans vos réponses.
Le visuel de base pour la référence des applications est votre ami ici. Essayez de commencer avec ce lien ...
Interop Outlook Mailitem Properties
Par exemple, je peux voir que ce message aura probablement des propriétés supplémentaires à celles que vous avez énumérées ci-dessus. Par exemple.
Pour tous ceux qui se demandent comment atteindre n'importe quel dossier par défaut et pas seulement "Boîte de réception", voici la liste:
3 Deleted Items
4 Outbox
5 Sent Items
6 Inbox
9 Calendar
10 Contacts
11 Journal
12 Notes
13 Tasks
14 Drafts
Il y en a plus (rappels, erreurs de synchronisation, etc.); vous pouvez obtenir la liste complète avec ce code (inspiré par la solution de John Cook aux dossiers):
import win32com
Outlook=win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
for i in range(50):
try:
box = Outlook.GetDefaultFolder(i)
name = box.Name
print(i, name)
except:
pass
Je ne colle pas toute la liste ici, car la mienne est en polonais et ne serait pas vraiment utile.
Je pensais que j'ajouterais aussi quelque chose sur la navigation dans les dossiers - tout cela est dérivé de la documentation Microsoft ci-dessus, mais il pourrait être utile d'avoir ici, en particulier si vous essayez d'aller n'importe où dans la structure des dossiers Outlook à l'exception de la boîte de réception.
Vous pouvez parcourir la collection de dossiers en utilisant folders
- notez que dans ce cas, il n'y a pas de GetDefaultFolder
après le GetNamespace
(sinon vous finirez probablement avec la boîte de réception).
Outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace('MAPI')
folder = Outlook.Folders[1]
Le numéro est l'index du dossier auquel vous souhaitez accéder. Pour savoir combien de sous-dossiers s'y trouvent:
folder.Count
S'il y a plus de sous-dossiers, vous pouvez utiliser un autre Folders
pour aller plus loin:
folder.Folders[2]
Folders
renvoie une liste de sous-dossiers, donc pour obtenir les noms de tous les dossiers du répertoire courant, vous pouvez utiliser une boucle rapide.
for i in range(folder.Count):
print (folder[i].Name)
Chacun des sous-dossiers a un .Items
méthode pour obtenir une liste des e-mails.
Vous pouvez voir tous les objets Outlook en direct et leurs données dans OutlookSpy .
MailItem
les propriétés, méthodes et événements de l'objet sont entièrement documentés sur https://msdn.Microsoft.com/en-us/library/office/ff861332.aspx