Как выполнить поиск в глобальном списке адресов Outlook (2010) по нескольким именам?
Я прочитал этот пост Как я могу найти имя в глобальном списке адресов Outlook (2010)? и нашел рабочее решение для получения имени из Outlook GAL.
У меня есть 3 вопроса:
Я могу получить контакт, если
search_string
это адрес электронной почты. Когда это имя, поиск не работает. ВернетсяFalse
решено, ноTrue
для отправки. Тогда я получаю ошибку при использованииae
объект. Что я делаю неправильно?Я не понимаю код достаточно, чтобы изменить его для поиска нескольких имен. Я просто создал цикл for, но, может быть, есть более эффективный способ? Например, могу ли я использовать
outlook.Session
объект между разными поисками?Линия
recipient.Resolve()
необходимо?
Заранее спасибо!
Моя попытка ниже.
from __future__ import print_function
import win32com.client
search_strings = ['Doe John', 'Doe Jane']
outlook = win32com.client.gencache.EnsureDispatch('Outlook.Application')
for search_string in search_strings:
recipient = outlook.Session.CreateRecipient(search_string)
recipient.Resolve()
print('Resolved OK: ', recipient.Resolved)
print('Is it a sendable? (address): ', recipient.Sendable)
print('Name: ', recipient.Name)
ae = recipient.AddressEntry
email_address = None
if 'EX' == ae.Type:
eu = ae.GetExchangeUser()
email_address = eu.PrimarySmtpAddress
if 'SMTP' == ae.Type:
email_address = ae.Address
print('Email address: ', email_address)
1 ответ
Не могу поверить, что я нашел решение так быстро после публикации вопроса. Поскольку трудно найти ответ. Я делюсь своими выводами здесь.
Он вдохновлен тем, как получить точное совпадение объекта addressEntry из GAL (Global Address List), хотя он находится на языке C#, а не на python.
Этот метод использует точное соответствие отображаемого имени, а не полагается на внешний вид для разрешения имени. Тем не менее, есть возможность перебрать глобальный список адресов и сделать частичное совпадение самостоятельно.
import win32com.client
search_string = 'Doe John'
outlook = win32com.client.gencache.EnsureDispatch('Outlook.Application')
gal = outlook.Session.GetGlobalAddressList()
entries = gal.AddressEntries
ae = entries[search_string]
email_address = None
if 'EX' == ae.Type:
eu = ae.GetExchangeUser()
email_address = eu.PrimarySmtpAddress
if 'SMTP' == ae.Type:
email_address = ae.Address
print('Email address: ', email_address)