trigger an action on new email using the python win32com module with outlook

Question:

is it possible to trigger some action when a new mail arrives in outlook using the python module win32com

pseudocode

 while 1
        if a mail arrives
            do x

Edit: I’m not allowed to use "run script" rule

Asked By: Marco Nappi

||

Answers:

You can create a rule that runs a VBA script. That script can do anything you want it to do, including running your Python code.

Use DispatchWithEvents function for Outlook NewMailEx event

Example

import pythoncom
from win32com.client import DispatchWithEvents


# Event handler class for Outlook events
class OutlookEventHandler(object):
    @staticmethod
    def OnNewMailEx(EntryIDCollection):
        for ID in EntryIDCollection.split(","):
            item = Outlook.Session.GetItemFromID(ID)
            # check item class, 43 = MailItem
            if item.Class == 43:
                print(" Subj: " + item.Subject)


if __name__ == "__main__":
    Outlook = DispatchWithEvents("Outlook.Application", OutlookEventHandler)
    olNs = Outlook.GetNamespace("MAPI")
    Inbox = olNs.GetDefaultFolder(6)
    pythoncom.PumpMessages()

Items.ItemAdd event (Outlook)

Example

import pythoncom
from win32com.client import DispatchWithEvents, Dispatch


# Event handler class for outlook events
class OutlookEvent(object):
    @staticmethod
    def OnItemAdd(item):
        """ Name    Required/Optional   Data type   Description
            Item    Required            Object      The item that was added."""
        print(f'The item that was added = {item.Subject}')


if __name__ == "__main__":
    outlook = Dispatch("outlook.Application")
    olNs = outlook.GetNamespace("MAPI")
    inbox = olNs.GetDefaultFolder(6)

    event = DispatchWithEvents(inbox.Items, OutlookEvent)
    pythoncom.PumpMessages()
Answered By: 0m3r