문제

나는 영감을 받았습니다 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top