【问题标题】:Check whether the email is a reply or response with Python win32com用 Python win32com 检查邮件是回复还是回复
【发布时间】:2017-12-26 19:35:54
【问题描述】:

我正在使用 Python win32com 来解析来自 Outlook 的电子邮件。我可以从 Outlook 文件夹中获取电子邮件,但我无法验证该电子邮件是回复或回复还是转发的消息,我需要检查收到的电子邮件是否是上一封邮件的回复(如果是,则查找原始邮件)或电子邮件是转发的消息。我正在使用以下代码从 Outlook 中获取电子邮件。

import win32com.client 

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox=outlook.Folders['xyz@xyz.com'].Folders['Inbox'].Folders['abc']
messagesReach = inbox.Items
for message in messagesReach:
    if message.Unread==True:
       print(message.body)

【问题讨论】:

  • 查找In-Reply-To 标头。
  • 感谢您的回复,但显示属性错误
  • 我猜你没有以正确的方式寻找标题。
  • 得到了答案,标题是ConversationID,这将像message.ConversationID一样工作。感谢您的帮助@Barmar

标签: python email outlook


【解决方案1】:

你好,标题是ConversationID,可以用作message.ConversationID 参考https://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.mailitem_properties.aspx

【讨论】:

  • 你能接受你的答案,让找到这个问题的人看到答案吗?
【解决方案2】:

您可以尝试阅读主题的前三个字符,并确定它是否具有“Re:”-前缀,因此是回复。大多数时候应该是这种情况。

import win32com.client 

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.Folders["xyz@xyz.com"].Folders["Inbox"].Folders["abc"]
messagesReach = inbox.Items
for message in messagesReach:
    if message.Unread == True:
       if message.Subject[:3] == "Re:":
          print(message.body)

【讨论】:

  • 感谢您的回复,我们可以这样做,但使用它我们无法找到原始邮件,并且如果发件人没有在主题中提及“RE:”,那么这将失败
  • 没错,但我没有找到其他方法。 message 没有属性来说明它是回复还是响应。甚至在Mailitem 的[属性列表][1] 中也没有可以提供该信息的属性。 [msdn.microsoft.com/en-us/library/…
  • 基本上我需要找到电子邮件链,用外行的语言我想阅读以前电子邮件的回复,例如对话,例如我向某人发送了一封邮件以批准某事作为回复 我收到了一封邮件,说批准,然后我需要找到批准的原始邮件。
  • 得到了答案,标题是ConversationID,这将像message.ConversationID一样工作。感谢您的帮助@Markus Schwer
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2015-12-19
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
相关资源
最近更新 更多