Вот такой вот скрипт отрыл. То что нужно, но говорит, что записей 0. И правда! Кстати Outlook 2003 SP 2 у меня. Контактов у меня действительно 0. Мне нужно в Address Book залезть. Ищу в MSDN. 
import win32com.client
DEBUG = 0
class MSOutlook:
    def __init__(self):
        self.outlookFound = 0
        try:
            self.oOutlookApp = \
                win32com.client.Dispatch("Outlook.Application")
            self.outlookFound = 1
        except:
            print "MSOutlook: unable to load Outlook"
        self.records = []
    def loadContacts(self, keys=None):
        if not self.outlookFound:
            return
        # this should use more try/except blocks or nested blocks
        onMAPI = self.oOutlookApp.GetNamespace("MAPI")
        ofContacts = \
            onMAPI.GetDefaultFolder(win32com.client.constants.olFolderContacts)
        if DEBUG:
            print "number of contacts:", len(ofContacts.Items)
        for oc in range(len(ofContacts.Items)):
            contact = ofContacts.Items.Item(oc + 1)
            if contact.Class == win32com.client.constants.olContact:
                if keys is None:
                    # if we were't give a set of keys to use
                    # then build up a list of keys that we will be
                    # able to process
                    # I didn't include fields of type time, though
                    # those could probably be interpreted
                    keys = []
                    for key in contact._prop_map_get_:
                        if isinstance(getattr(contact, key), (int, str, unicode)):
                            keys.append(key)
                    if DEBUG:
                        keys.sort()
                        print "Fields\n======================================"
                        for key in keys:
                            print key
                record = {}
                for key in keys:
                    record[key] = getattr(contact, key)
                if DEBUG:
                    print oc, record['FullName']
                self.records.append(record)
if __name__ == '__main__':
    if DEBUG:
        print "attempting to load Outlook"
    oOutlook = MSOutlook()
    # delayed check for Outlook on win32 box
    if not oOutlook.outlookFound:
        print "Outlook not found"
        sys.exit(1)
    fields = ['FullName',
                'CompanyName',
                'MailingAddressStreet',
                'MailingAddressCity',
                'MailingAddressState',
                'MailingAddressPostalCode',
                'HomeTelephoneNumber',
                'BusinessTelephoneNumber',
                'MobileTelephoneNumber',
                'Email1Address',
                'Body'
                ]
    if DEBUG:
        import time
        print "loading records..."
        startTime = time.time()
    # you can either get all of the data fields
    # or just a specific set of fields which is much faster
    oOutlook.loadContacts()
    #oOutlook.loadContacts(fields)
    if DEBUG:
        print "loading took %f seconds" % (time.time() - startTime)
    print "Number of contacts: %d" % len(oOutlook.records)