Frage

Ich habe von inspiriert Ändern Microsoft Outlook-Kontakte aus Python - - ich bin auf der Suche scripting einige meiner ärgerlichen Outlook versuche, sich mit dem win32com Paket. Ich bin in einer Windows-Benutzer Kabine gefangen Linux-Benutzer, so dass ich weiß nicht viel über COM.

Ich suche nach Informationen darüber, ob COM für die Reflexion über win32com ermöglicht oder ob es Unterlagen über die Outlook 2007 COM-Objekte. Alle anderen Hinweise, die Sie denken, wird hilfreich sind willkommen!

ich gefunden habe Programmieren von Outlook mit Python , aber ich bin mit Outlook 2007 so würde ich auf einige weitere Informationen, wie sehr der Outlook 2000 Informationen noch anwendbar ist.

TIA!

War es hilfreich?

Lösung

Um Ihre Frage zu beantworten Dokumentation. Hier sind zwei Links, die ich regelmäßig besuchen, wenn Outlook-Makros zu entwickeln. Während die Seiten in erster Linie mit MS-Technologien auf die Entwicklung konzentrieren sich die meisten der Code ziemlich leicht zu Python übersetzt werden kann, wenn Sie verstehen, wie COM verwenden.

Andere Tipps

In der Regel ältere Verweise auf das Objektmodell sind wahrscheinlich immer noch gültig angesichts der Aufmerksamkeit Microsoft rückwärts-Kompatibilität zahlt.

Was, ob Sie win32com in Python zu verwenden, in der Lage, für Outlook, ja, sollten Sie in der Lage sein, das verwenden, um spät gebundenen Aufrufe an das Outlook-Objektmodell zu machen. Hier ist eine Seite, die beschreibt, wie es mit Excel zu tun:

http://oreilly.com/catalog/pythonwin32/chapter/ch12.html

Ein Problem, das Ihnen bewusst gemacht werden sollen, ist die Tatsache, dass Outlook einen Sicherheitsdialog hat, die nach oben geworfen wird, wenn externe Programme versuchen, das Objektmodell zuzugreifen und Operationen in Outlook durchführen. Sie sind nicht in der Lage sein um diesen Dialog zu unterdrücken.

Wenn Sie den Dialog vermeiden wollen, sind Sie besser dran Makros in VBA für Outlook erstellen, die in einer Sitzung geladen werden, und setzen Tasten auf einem neuen CommandBar, um sie auszuführen.

Dies war meine Implementierung von vor ein paar Jahren. Ich benutzte es, das Senden und Empfangen von E-Mail zu automatisieren. Nicht sicher, ob dies mit 2010 arbeiten wird es auf Rückzahlung hängt auch.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top