Вот такой вот скрипт отрыл. То что нужно, но говорит, что записей 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)