Python Outlook 2007 Com Primer
-
03-07-2019 - |
문제
나는 영감을 받았습니다 Python에서 Microsoft Outlook 연락처 수정 - 나는 더 성가신 전망을 win32com
패키지. 저는 Windows 사용자의 칸막이에 갇힌 Linux 사용자이므로 COM에 대해 많이 모릅니다.
COM이 반사를 허용하는지 여부에 대한 정보를 찾고 있습니다. win32com
또는 Outlook 2007 COM 객체에 문서가 있는지 여부. 도움이 될 것이라고 생각하는 다른 포인터는 환영합니다!
내가 찾았 어 파이썬으로 프로그래밍 전망, 그러나 Outlook 2007을 사용하고 있으므로 Outlook 2000 정보의 양에 대한 자세한 정보가 여전히 적용되는 방법에 대한 자세한 정보를 원합니다.
티아!
해결책
문서에 대한 질문에 답변합니다. 다음은 Outlook 매크로를 개발할 때 정기적으로 방문하는 두 가지 링크입니다. 사이트는 주로 MS 기술 개발에 중점을 두지 만 Com을 사용하는 방법을 이해하면 대부분의 코드는 Python으로 쉽게 번역 될 수 있습니다.
다른 팁
일반적으로 Microsoft가 후진 호환성에 대한 관심이 주목하면 객체 모델에 대한 기존 참조는 여전히 유효합니다.
Outlook에 Python에서 Win32com을 사용할 수 있는지 여부에 대해서는 Outlook Object 모델에 대한 늦은 호출을 위해이를 사용해야합니다. 다음은 Excel로 수행하는 방법을 설명하는 페이지입니다.
http://oreilly.com/catalog/pythonwin32/chapter/ch12.html
당신이 알아야 할 문제는 Outlook에 외부 프로그램이 객체 모델에 액세스하고 Outlook에서 작업을 수행 할 때 발생하는 보안 대화 상자가 있다는 사실입니다. 당신은 ~ 아니다 이 대화를 억제 할 수 있습니다.
대화 상자를 피하려면 세션에로드 된 Outlook을 위해 VBA에서 매크로를 만들고 새 명령 바에 버튼을 넣어 실행하는 것이 좋습니다.
이것은 몇 년 전의 나의 구현이었습니다. 이메일 수신 및 전송을 자동화하는 데 사용했습니다. 이것이 2010 년과 함께 작동하는지 확실하지 않습니다. 그것은 구속에 달려 있습니다.
import win32com.client,os,re
from utils.autoencode import autoencode
generated='2D5E2D34-BED5-4B9F-9793-A31E26E6806Ex0x4x7.py'
mapi_utils=win32com.client.Dispatch('Redemption.MAPIUtils')
olFolderDeletedItems=3
olFolderOutbox=4
olFolderSentItems=5
olFolderInbox=6
olFolderCalendar=9
olFolderContacts=10
olFolderJournal=11
olFolderNotes=12
olFolderTasks=13
class Attachment:
def __init__(self,CreationTime,attachement):
self.CreationTime=CreationTime
self.attachement=attachement
self.FileName=attachement.FileName
self.FileSize=attachement.FileSize
self.text=self.attachement.AsText
def Save(self,folder,filename=None,group=True):
if group:
folderGroup=re.sub('\\W','',str(self.CreationTime))
subfolder=os.path.join(folder,folderGroup)
if not os.path.isdir(subfolder):
os.mkdir(subfolder)
else:
folderGroup=''
if filename:
path=os.path.join(folder,folderGroup,filename)
else:
path=os.path.join(folder,folderGroup,self.FileName)
if os.path.isdir(folder):
self.attachement.SaveAsFile(path.replace('/','\\'))
return path
class Attachments:
def __init__(self,CreationTime,Attachments):
self.CreationTime=CreationTime
self.Attachments=Attachments
def __iter__(self):
return self.next()
def next(self):
for idx in range(self.Attachments.Count):
idx+=1
yield Attachment(self.CreationTime,self.Attachments.Item(idx))
class Message:
def __init__(self,store,folder,msg):
self.store=store
self.folder=folder
self.msg=msg
self.Attachments=Attachments(self.msg.CreationTime,msg.Attachments)
self.body=msg.Body
self.body_format=msg.BodyFormat
self.html=msg.HTMLBody
self.subject=msg.Subject
self.unread=msg.UnRead
self.id=msg.EntryID
def __str__(self):
return str('%s-%s-%s'%(self.store.Name,self.folder, self.msg))
def read(self,bool=True):
status=bool==False
self.msg.UnRead=status
class Inbox:
def __init__(self,session,store,folder,wantedFolder=None):
self.session=session
self.store=store
self.folder=folder
self.wantedFolder=wantedFolder
self.Name=folder.Name
def __getitem__(self,name):
self.wantedFolder=name
return self.next()
def __str__(self):
return '%s-%s'%(self.store.Name,self.Name)
def __iter__(self):
return self.next()
def subFolder(self,name):
self.wantedFolder=name
return self.next()
def next(self):
if self.wantedFolder:
subFolders=self.folder.Folders
for idx in range(subFolders.Count):
idx+=1
subfolder=subFolders.Item(idx)
if subfolder.Name==self.wantedFolder:
for msg in subfolder.Items:
yield Message(self.store,self.folder,msg)
else:
for msg in self.folder.Items:
yield Message(self.store,self.folder,msg)
class Store:
def __init__(self,session,store):
self.session=session
self.store=store
self.Name=store.Name
self.Inbox=Inbox(self.session,self.store,self.session.GetDefaultFolder(olFolderInbox))
def __str__(self):
return self.Name
def __iter__(self):
return self.next()
def next(self,folder=None):
pass
class rdo:
def __init__(self):
'''Outlook Redemption RDO wrapper'''
self.session = win32com.client.gencache.EnsureDispatch("Redemption.RDOSession")
self.session.Logon()
self.stores={}
for store in self.session.Stores:
self.stores[store.Name]=Store(self.session,store)
self.default_store=self.session.Stores.DefaultStore.Name
def __getitem__(self,name):
if self.stores.has_key(name):
return self.stores[name]
def __iter__(self):
return self.next()
def next(self):
stores=self.stores.keys()
yield self.stores[stores.pop(stores.index(self.default_store))]
for store in stores:
yield self.stores[store]
def getStore(self,name):
if self.stores.has_key(name):
return self.stores[name]
else:
return False
def getSharedMailbox(self,name):
try:
return Store(self.session,self.session.GetSharedMailbox(name))
except Exception,e:
if 'Could not resolve in GAL' in e.args[2][2]:
raise Exception('Mailbox could not be found')
else:
raise Exception ('Unknown error: %s'%e.args[2][2])
if __name__=='__main__':
r=rdo()
inbox = r.getStore('Mailbox - Foo').Inbox
for msg in inbox.subFolder('test'):
print msg.subject,msg.id