繁体   English   中英

打开电子邮件时会触发 Python Outlook win32 事件

[英]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 处理程序在事件处理程序调用中没有收到thisself指针(即 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM