Python MAPI, windows проблема с обслуживанием на windows сервере 2016 - PullRequest
0 голосов
/ 21 января 2020

Я пишу скрипт, который загружает вложенный документ из каждого электронного письма в подпапку моего почтового ящика Outlook. Скрипт отлично работает при запуске из CMD или PyCharm. Однако это не работает, когда я запускаю скрипт как сервис.

Вот часть кода, с которой у меня возникли проблемы:

import win32com.client

try:
 outlook = win32com.client.Dispatch("Outlook.Application")
 namespace = outlook.GetNamespace("MAPI")
 mail_account = namespace.Folders.Item(2)
 active_folder = mail_account.Folders['Inbox'].Folders['Subfolder']
 message = active_folder.items.GetLast()

При запуске из CMD эта часть обрабатывает самое новое письмо, полученное в моей подпапке. Но в качестве службы мой сценарий истекает:

mail_account = namespace.Folders.Item(2)

Он не работает при перезаписи его для обработки входящих почтовых ящиков с именами, и т.д. c:

mail_account = namespace.Folders.Item("mymail@mymail.com")

Кажется, что службы по какой-то причине не может обработать настройку MAPI. Любая помощь или указатели будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 21 января 2020

Даже если ваша служба работает под именем локального пользователя, который использует Outlook и имеет настроенный профиль, Outlook (или любое другое приложение Office) нельзя использовать из службы.

Ваши единственные альтернативы Extended MAPI (C ++ или Delphi), EWS (если вы используете Exchange, это протокол на основе HTTP) или Redemption (это RDO семейство объектов упаковывает Extended MAPI и может использоваться на любом языке).

0 голосов
/ 21 января 2020

В статье Замечания по серверной автоматизации Office говорится следующее:

В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых необслуживаемое неинтерактивное клиентское приложение или компонент (включая ASP, ASP. NET, DCOM и NT Services), поскольку Office может демонстрировать нестабильное поведение и / или тупиковую блокировку при запуске Office в этой среде.

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

Ниже перечислены ваши возможные варианты:

  1. Используйте низкоуровневый API, для которого Outlook является на основании - расширенный MAPI. Или просто любые сторонние обертки вокруг этого API, такие как Redemption.
  2. Если вы имеете дело с профилями сервера Exchange, вы можете рассмотреть возможность использования EWS, см. Начало использования веб-служб в Exchange для получения дополнительной информации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...