2013-09-16 2 views
0

Я нашел много ресурсов для проверки заголовков в письме, чтобы определить, было ли отправлено сообщение с использованием автоответчика. Я ищу, чтобы обнаружить, что автоответчик настроен до того, как будет выполнен контакт.Используйте python для обнаружения автоответчика перед отправкой

Почему я думаю, что это возможно: в Outlook, если вы добавите адресата из адресной книги, он покажет свое сообщение об автоответчике над линией «Кому:», прежде чем даже нажать «Отправить».

Цель: Я хотел бы передать список сотрудников функции и вернуть двоичный список того, находятся ли они в офисе на основе состояния включения/выключения автоответчика.

Какой-то плохой psuedo-код (пожалуйста, извините смешение классов и списков, это просто для простого примера).

list = ['Ted Jones', 'Michael Brickman', 'This name', 'That name'] 

for employee in list: 
    if employee.autoresponse != '': 
     employee.inoffice = 0 

output = [0,1,1,1] #-- So, Ted Jones is out of the office 

Я, конечно, не придерживался этого стиля вывода, просто стараюсь быть конкретным. Мне нужен какой-то упорядоченный список или что-то связанное Имя -> Внутрь/вне офиса

Я хотел бы остановиться в Python, если это возможно, но мне интересно услышать другие решения.

Есть ли все равно для этого? Может быть, использовать win32com или pyad? Если ресурс для этой информации существует, пожалуйста, дайте мне знать ... Я не смог найти его среди «проверки гантелей заголовков».

+0

Возьмите lkook по адресу: http://technet.microsoft.com/en-us/library/dd638081(v=exchg.150).aspx – ninMonkey

ответ

0

Вам необходимо либо использовать Outlook's automation interface, либо сделать то же самое, что делает Outlook (предположительно через MAPI или AD), или сделать эквивалент с каким-либо другим API.

Вы можете использовать win32com для первого из трех.

Когда вы добавляете получателя в список To в Outlook, он получает объект Recipient, который имеет свойство AutoResponse, которое Outlook покажет вам.

Самый простой (если не самый чистый) способ получить объект Recipient через OOM - это сделать то же самое: создать фиктивное сообщение, добавить получателя, а затем просмотреть его свойства. Элементы имеют Recipients объектов, которые имеют метод Add, который принимает идентификатор и возвращает Recipient (и, конечно же, добавляет его получателям элемента).

Таким образом, код должен выглядеть примерно так (непроверенный, потому что у меня нет окна Windows/Outlook, подключенный к Обменять здесь):

session = win32com.client.Dispatch("Mapi.Session") 
session.Logon(MY_PROFILE) 
outlook = win32com.client.Dispatch("Outlook.Application") 

message = outlook.CreateItem(0) # olMailItem 
autoresponses = {} 
for name in names: 
    recipient = message.Recipients.Add(name) 
    autoresponses[name] = recipient.AutoResponse 

Конечно, Вы можете комбинировать, что в однострочника я понял, что это может быть яснее. Кроме того, вы, вероятно, захотите отказаться от сообщения, чтобы Outlook не оставил ваш оставшийся мусор в черновиках или что-то в этом роде, и вам, вероятно, понадобится некоторая обработка ошибок, и вам может потребоваться отдельное сообщение для каждого получателя, чтобы упростить восстанавливаться после ошибок и двигаться дальше и т. д. Но этого, вместе с документами MSDN и win32com, должно быть достаточно, чтобы вы пошли.

Конечно, это работает только в том случае, если name разрешает серверу почтовый ящик; если вы укажете локальное имя или адрес или внешний адрес, вы просто разрешите запись в местной адресной книге или сообщение с незаполненной электронной почтой, ни один из которых не имеет AutoResponse. Но это точно так же, как в Outlook, поэтому, предположительно, это ожидается.

Также обратите внимание, что при первом запуске скрипта, который пытается получить доступ к адресной книге, если пользователь не намеренно отключил функции безопасности по умолчанию, он получит всплывающее окно, например: «Программа пытается получить доступ к электронной почте адреса, которые вы сохранили в Outlook. Вы хотите разрешить это? "

Смежные вопросы