Reading e-mails from Outlook with Python through MAPI Reading e-mails from Outlook with Python through MAPI python python

Reading e-mails from Outlook with Python through MAPI


I had the same problem you did - didn't find much that worked. The following code, however, works like a charm.

import win32com.clientoutlook = 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 foldermessages = inbox.Itemsmessage = messages.GetLast()body_content = message.bodyprint body_content


I have created my own iterator to iterate over Outlook objects via python. The issue is that python tries to iterates starting with Index[0], but outlook expects for first item Index[1]... To make it more Ruby simple, there is below a helper class Oli with followingmethods:

.items() - yields a tuple(index, Item)...

.prop() - helping to introspect outlook object exposing available properties (methods and attributes)

from win32com.client import constantsfrom win32com.client.gencache import EnsureDispatch as Dispatchoutlook = 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


Sorry for my bad English. Checking Mails using Python with MAPI is easier,

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

Here we can get the most first mail into the Mail box, or into any sub folder. Actually, we need to check the Mailbox number & orientation. With the help of this analysis we can check each mailbox & its sub mailbox folders.

Similarly please find the below code, where we can see, the last/ earlier mails. How we need to check.

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

With this we can get most recent email into the mailbox. According to the above mentioned code, we can check our all mail boxes, & its sub folders.