【问题标题】:Python MAPI, windows service issue on windows server 2016Python MAPI,Windows Server 2016 上的 Windows 服务问题
【发布时间】:2020-01-21 13:59:18
【问题描述】:

我正在编写一个脚本,该脚本从我的 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)

重写它以处理带有名称的收件箱等时不起作用:

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

由于某种原因,服务似乎无法以这种方式处理 MAPI 设置。任何帮助或指点将不胜感激。

【问题讨论】:

标签: python windows winapi outlook


【解决方案1】:

即使您的服务以使用 Outlook 并配置了配置文件的本地用户身份运行,也无法从服务中使用 Outlook(或任何其他 Office 应用)。

您唯一的选择是扩展 MAPI(C++ 或 Delphi)、EWS(如果您使用 Exchange,它是基于 HTTP 的协议)或 Redemption(它是 RDO 对象系列包装扩展 MAPI 并且可以可用于任何语言)。

【讨论】:

  • 嗨,好的,谢谢你的评论。我想我会使用从 CMD 运行我的脚本的服务来设置它。
  • @kri:您不能在服务上下文下运行脚本。交错另一个进程(如命令解释器)不会改变这一点。这个答案不是评论。这是你的答案。你不能这样做,这些是你有的选择。
【解决方案2】:

Considerations for server-side Automation of Office 文章声明如下:

Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能表现出不稳定Office 在此环境中运行时的行为和/或死锁。

如果您要构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用服务器端解决方案中的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将在整体解决方案的稳定性方面承担风险。

您可能的选择如下:

  1. 使用 Outlook 所基于的低级 API - 扩展 MAPI。或者只是围绕该 API 的任何第三方包装器,例如 Redemption。
  2. 如果您处理 Exchange 服务器配置文件,您可以考虑使用 EWS,请参阅Start using web services in Exchange 了解更多信息。

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多