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
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()
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()
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
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()
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()