web-dev-qa-db-fra.com

Lecture clairement documentée des fonctionnalités des e-mails avec python win32com outlook

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.

44
Phoenix

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.

  • message.CC
  • message.Importance
  • message.LastModificationTime
26
Genome

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.

19
pajonk

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.

5
John Cook

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

3