【问题标题】:Use python to detect outlook auto-responder before sending message发送消息前使用python检测outlook自动回复
【发布时间】:2013-09-16 01:26:47
【问题描述】:

我找到了很多关于检查电子邮件标题以检测邮件是否使用自动回复器发送的资源。我希望在进行任何联系之前检测到是否配置了自动回复器。

为什么我认为这是可能的:在 Outlook 中,如果您从通讯簿添加收件人,它会在“收件人:”行上方显示他们的自动回复消息,甚至在点击发送之前。

目标:我想将员工列表传递给函数,并根据自动回复器的开/关状态返回他们是否在办公室的二进制列表。

一些糟糕的伪代码(请原谅类和列表的混合,这只是一个简单的例子)。

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?如果存在此信息的资源,请告诉我...我无法在“检查标题”的垃圾中找到它。

【问题讨论】:

标签: python outlook win32com exchange-server-2010


【解决方案1】:

您将不得不使用Outlook's automation interface,或执行与 Outlook 相同的操作(可能通过 MAPI 或 AD),或使用其他 API 执行等效操作。

您可以将 win32com 用于三个中的第一个。

当您将收件人添加到 Outlook 中的“收件人”列表时,它会获得一个 Recipient 对象,该对象具有一个 AutoResponse 属性,Outlook 会向您显示该属性。

通过 OOM 获取Recipient 对象的最简单(如果可能不是最干净)方法是执行完全相同的操作:创建虚拟消息,添加收件人,然后查看其属性。项目有Recipients 对象,它有一个Add 方法,该方法接受一个标识符并返回一个Recipient(当然,将它添加到项目的收件人)。

所以,代码应该看起来像这样(未经测试,因为我没有连接到 Exchange 的 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 中。是否允许这样做?"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多