首页 > 解决方案 > 如何在 Python 中通过 imap/pop3 识别 Outlook“消息 ID”?

问题描述

问题

我在 Azure 中使用“逻辑应用程序”来创建传入邮件队列。注册电子邮件的方式是使用“消息 ID”,它被描述为“消息的唯一标识符”。我希望能够使用此 ID 通过 imap 获取电子邮件 - 这可能吗?

逻辑应用“消息 ID”

  1. “消息 ID”示例:

AQMkADAwATM3ZmYAZS0yNTYwLWNkZAAzLTAwAi0wMAoARgAAA-U4TGbG56lEtdoXy_23gW0HAKhWKDtf5AJErHyhh_b9NYQAAAIBDAAAAKhWKDtf5AJErHyhh_b9NYQAAAIFgAAAA==

  1. 逻辑应用示例:

在此处输入图像描述

我试过的

我尝试将所有电子邮件下载为 eml,然后将它们读入 notepad++ 以查看 eml 文件中是否存在“消息 ID”,但它们不存在。

# Library for downloading emails
import imaplib

# Logging in
mail = imaplib.IMAP4_SSL("outlook.office365.com",993)
mail.login(email_user, email_pass)

# Downloading emails to eml
mail.select('Inbox')
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
    typ, data = mail.fetch(num, '(RFC822)')
    f = open('%s/%s.eml' %("/my/path/", num), 'wb')
    f.write(data[0][1])
mail.close()
mail.logout()

标签: pythonoutlookimapazure-logic-appsmessageid

解决方案


我可以知道您为什么要通过 IMAP 获取电子邮件。因为您也可以使用 Outlook api 中的消息 ID 来获取电子邮件。这是您可以使用的api:

GET https://outlook.office.com/api/v2.0/me/messages/{message_id}

您可以在此处找到更多详细信息:

https://docs.microsoft.com/en-us/previous-versions/office/office-365-api/api/version-2.0/mail-rest-operations#GetMessages

也只是为了更新,在 Outlook 中,您不会在 .eml 或正文中找到消息 ID,它在 Internet 标头中可用。大多数客户端实用程序下载所有消息的标头(包括消息 ID)、存储它们,然后对它们进行后处理。对于 Outlook,您可以在 Internet 标题中找到它,如下所示:

在此处输入图像描述

在此处输入图像描述

参考:https ://www.codetwo.com/kb/messageid/

不过,如果您想使用 IMAP 访问电子邮件,请尝试以下线程,看看是否有帮助:

https://www.go4expert.com/articles/accessing-email-using-imap-python-t28838/

https://social.msdn.microsoft.com/Forums/en-US/29f44441-feda-4f81-a04c-40d53b3dfdc5/how-to-access-an-email-using-messageid-in-outlook?forum=outlookdev

希望能帮助到你。


推荐阅读