【发布时间】:2019-02-17 05:17:08
【问题描述】:
我在尝试通过 python wincom32.client 获取批量邮件时遇到了一些问题。
基本上,在单个会话中可以打开的项目数量似乎是有限制的,那就是服务器端标志或状态.. 问题是我没有找到任何恢复/关闭/重新设置的方法,我不能要求系统管理员为我做这件事..
这是我的代码 sn-p - 我知道它很丑 - 但我在 jupiter notebook 上使用它只是为了在正确安排之前进行试验/玩耍。
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
def create_message_list(folder):
return [{
"folder": folder.Name,
"sender" : m.Sender,
"recipients" : m.Recipients,
"subject" : m.subject,
"body":m.body
} for m in folder.Items]
for folder in outlook.Folders:
if (folder.Name=="myfolder.name"):
message_list = create_message_list(folder)
这是我得到的:
com_error: (-2147352567, '发生异常。', (4096, 'Microsoft Outlook', '您的服务器管理员已限制项目数量 您可以同时打开。尝试关闭您打开的消息或 从您的未发送邮件中删除附件和图像 组成。',无,0,-2147220731),无)。
请注意,我 让我的草图代码工作了一段时间。我可以在它搞砸该错误之前获取类似 10k 条消息。
我一直在尝试的事情(没有结果) - 尝试关闭文件夹/mapi 会话 - 在相同的项目上运行 for 循环并调用 message.Close(0) - 在消息上使用 GetFirst() / GetLast() 方法而不是列表理解
感谢任何人的想法/建议/无论如何。
【问题讨论】:
-
你的代码处理这些项目是什么?要记住的一件事是,您应该避免使用“foreach”循环,因为它们会使所有枚举项保持打开状态,直到循环退出。
-
@DmitryStreblechenko 我正在做的唯一处理是收集项目字段,如图所示 - 我想将整个列表存储在 pandas 数据框中以执行进一步的操作。
标签: python outlook exchange-server win32com mapi