Python >> Tutoriel Python >  >> Python

Lire des e-mails d'Outlook avec Python via MAPI

J'ai eu le même problème que vous - je n'ai pas trouvé grand-chose qui fonctionnait. Le code suivant, cependant, fonctionne comme un charme.

import win32com.client

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

inbox = outlook.GetDefaultFolder(6) # "6" refers to the index of a folder - in this case,
                                    # the inbox. You can change that number to reference
                                    # any other folder
messages = inbox.Items
message = messages.GetLast()
body_content = message.body
print body_content

J'ai créé mon propre itérateur pour parcourir les objets Outlook via python. Le problème est que python essaie d'itérer en commençant par Index[0], mais Outlook attend le premier élément Index[1]... Pour rendre Ruby plus simple, il y a ci-dessous une classe d'assistance Oli avec les méthodes suivantes :

.items() - donne un tuple(index, Item)...

.prop() - aidant à introspecter l'objet Outlook en exposant les propriétés disponibles (méthodes et attributs)

from win32com.client import constants
from win32com.client.gencache import EnsureDispatch as Dispatch

outlook = Dispatch("Outlook.Application")
mapi = outlook.GetNamespace("MAPI")

class Oli():
    def __init__(self, outlook_object):
        self._obj = outlook_object

    def items(self):
        array_size = self._obj.Count
        for item_index in xrange(1,array_size+1):
            yield (item_index, self._obj[item_index])

    def prop(self):
        return sorted( self._obj._prop_map_get_.keys() )

for inx, folder in Oli(mapi.Folders).items():
    # iterate all Outlook folders (top level)
    print "-"*70
    print folder.Name

    for inx,subfolder in Oli(folder.Folders).items():
        print "(%i)" % inx, subfolder.Name,"=> ", subfolder

Désolé pour mon mauvais anglais.Vérification des e-mails en utilisant Python avec MAPI est plus facile,

outlook =win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders[5]
Subfldr = folder.Folders[5]
messages_REACH = Subfldr.Items
message = messages_REACH.GetFirst()

Ici, nous pouvons obtenir le plus de premiers messages dans la boîte aux lettres ou dans n'importe quel sous-dossier. En fait, nous devons vérifier le numéro et l'orientation de la boîte aux lettres. Avec l'aide de cette analyse, nous pouvons vérifier chaque boîte aux lettres et ses sous-dossiers de boîte aux lettres.

De même, veuillez trouver le code ci-dessous, où nous pouvons voir les derniers/antérieurs mails. Comment nous devons vérifier.

`outlook =win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
folder = outlook.Folders[5]
Subfldr = folder.Folders[5]
messages_REACH = Subfldr.Items
message = messages_REACH.GetLast()`

Avec cela, nous pouvons obtenir les e-mails les plus récents dans la boîte aux lettres. Selon le code mentionné ci-dessus, nous pouvons vérifier toutes nos boîtes aux lettres et ses sous-dossiers.