[英]Python Outlook win32 event trigger when email is opened
我的目标是每当我在 Outlook 上打开电子邮件时,使用 python 脚本触发事件处理程序,从那里我应该能够获取打开的电子邮件的数据,然后对数据进行处理。 有一个关于如何通过 VBA 执行此操作的类似线程( 此处),但我不知道如何使用 win32com 将其转换为 python。
我已经浏览了 microsoft 文档,但无法弄清楚如何在 MailItem 对象上触发事件。 https://docs.microsoft.com/en-us/office/vba/api/outlook.mailitem
我最接近做的事情是通过做类似下面的事情,这可能不是解决方案,因为在这种情况下(如文档所述)不包含数据。
import win32com.client
import pythoncom
import re
class Handler_Class(object):
def OnItemLoad(self, item):
print(item.Class)
outlook = win32com.client.DispatchWithEvents("Outlook.Application",Handler_Class)
任何想法/建议表示赞赏! 提前致谢!
这里有一些对我有用的概念证明,来自 SO 帖子的混合,包括这个: How to pass arguments to win32com event handler 。 它打印出的Subject
行和Body
时的MailItem读的。
OP 代码的额外步骤是处理Application.ItemLoad
事件,并使用传递的信息继续为 Item 单独设置处理程序。 此外,由于您的 MailItem 处理程序在事件处理程序调用中没有收到this
或self
指针(即 MailItem 的 IDispatch 接口),您必须自己保存以备后用。
import win32com.client
import pythoncom
#Handler for Application Object
class Application_Handler(object):
def OnItemLoad(self, item):
print('Application::OnItemLoad')
#Only want to work with MailItems
if( item.Class == win32com.client.constants.olMail ):
#Get a Dispatch interface to the item
cli = win32com.client.Dispatch(item)
#Set up a handler
handler = win32com.client.WithEvents(cli,MailItem_Handler)
#Store the MailItem's Dispatch interface for use later
handler.setDisp(cli)
#Handler for MailItem object
class MailItem_Handler(object):
def setDisp(self,disp):
self._disp = disp
def OnOpen(self,bCancel):
print('MailItem::OnOpen')
def OnRead(self):
print('MailItem::OnRead')
subj = self._disp.Subject
print('Subject:',subj)
body = self._disp.Body
print('Body:',body)
outlook = win32com.client.DispatchWithEvents("Outlook.Application", Application_Handler)
#Message loop
pythoncom.PumpMessages()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.