2016-07-11 2 views
0

Outlook의 범주 및 폴더 변경을 모니터링하는 Python 도구를 만들려고합니다. 지금은 카테고리 변경 사항을 모니터링 이벤트에 훅이 확장하려고Python을 사용하여 Outlook에서 범주/폴더 변경 모니터링

import win32com.client 
import pythoncom 
import re 

def getPath(folder, path=[]): 
    if folder.parent.parent.parent: 
     path.append(folder.name) 
     getPath(folder.parent, path) 
    return "\\".join(reversed(path)) 

class Handler_Class(object): 
    def OnNewMailEx(self, receivedItemsIDs): 
     for ID in receivedItemsIDs.split(","): 
      mailItem = outlook.Session.GetItemFromID(ID) 
      if re.search("(TS)|(ST)", mailItem.Parent.FolderPath) != None: 
       print "Subj: " + mailItem.Subject 
       print "Time: " + str(mailItem.ReceivedTime) 
       print "Parent: " + str(mailItem.Parent.FolderPath) 
       # print "Body: " + mailItem.Body.encode('ascii', 'ignore') 
       print "========" 

outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class) 
pythoncom.PumpMessages() 

:

지금까지 나는 OnNewMailEx 이벤트에 후크 아래의 코드를 사용하여 수신되는 모든 메일을 모니터링 할 수 있었다. 나는 (http://svn.cy55.de/changeset/1896?format=diff&new=1896에서 올바른 이름) 아래의 코드를 시도 할 때 https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.olkcategory.aspx

그러나, 아무 일도 발생하지 않습니다 : MSDN 주제에이있다

class Handler_Class(object): 
    def OnChange(self): 
     print("Hook successful!")  

category = win32com.client.DispatchWithEvents("Outlook.OlkCategoryStrip", Handler_Class) 
pythoncom.PumpMessages() 

을 또한, 나는 이벤트에 대한 모든 문서를 찾을 수 없습니다 전자 메일이 다른 폴더로 이동했는지 모니터링합니다. 어떤 아이디어?

답변

0

참조하는 OlkCategory 인터페이스는 Outlook 양식 영역에서 사용되는 범주 컨트롤에 연결됩니다. 그 자체로는 쓸모가 없습니다. MailItem.PropertyChange 이벤트에 연결해야하는 항목의 속성 변경 (범주 포함)을 모니터링하려면 https://msdn.microsoft.com/en-us/library/ff866739.aspx.

폴더에 항목이 추가 될 때 모니터링하려면 주어진 폴더에 대해 Items.ItemAdd 이벤트를 트래핑해야합니다 (https://msdn.microsoft.com/en-us/library/ff869609.aspx).

+0

안녕하세요 Eric, 다시 방문해 주셔서 감사합니다. 몇 가지 질문 : 1. "PropertyChange"/ "ItemAdd"이벤트에 어떻게 연결합니까? 나는 위의 handler_Class에 Def OnPropertyChange (self, name)를 추가하는 것만 큼 간단하지 않다고 생각하니? 새로운 "DispatchWithEvents"를 만들어야합니까? 2. WHO가 재산을 변경했거나 물품을 옮겼다는 것을 추적 할 수 있습니까? – Vlad

+0

죄송합니다, 저는 Python을 모른다. 말할 수있는 것은 PropertyChange는 MailItem 클래스의 이벤트이고 ItemAdd는 Items 컬렉션 클래스의 속성 (Folder 개체의 Items 속성에서 검색 됨)입니다. "Who"는 항상 현재 사용자가되며 NameSpace.CurrentUser 속성을 통해 가져올 수 있습니다. –

+0

안녕하세요, 어떻게 VBA에서 이러한 이벤트에 관심을 가지시겠습니까? – Vlad