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.