如何在 Python 中通过 imap/pop3 识别 Outlook“消息 ID”?

Posted

技术标签:

【中文标题】如何在 Python 中通过 imap/pop3 识别 Outlook“消息 ID”?【英文标题】:How do I identify Outlook "message id" over imap/pop3 in Python? 【发布时间】:2020-01-20 08:27:55 【问题描述】:

问题

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

逻辑应用“消息 ID”

    “消息 ID”示例:

AQMkADAwATM3ZmYAZS0yNTYwLWNkZAAzLTAwAi0wMAoARgAAA-U4TGbG56lEtdoXy_23gW0HAKhWKDtf5AJErHyhh_b9NYQAAAIBDAAAAKhWKDtf5AJErHyhh_b9NYQAAAIFgAAAA==

    逻辑应用示例:

我尝试过的

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

# 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()

【问题讨论】:

【参考方案1】:

我想知道您为什么要通过 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

希望对你有帮助。

【讨论】:

这个“message-id”看起来不像 Message-Id 标头mesasge-id(应该看起来像 xyz@domain.com 我曾尝试使用 Outlook api,但我认为文档非常糟糕。它没有说明我如何仅为一个 Outlook 帐户进行“应用程序注册” - 它还指出您可以将其用于个人帐户,但是当我尝试这样做时,它要求电子邮件帐户是组织 AD 的一部分。

以上是关于如何在 Python 中通过 imap/pop3 识别 Outlook“消息 ID”?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby从指定邮箱读取邮件(IMAP/POP3)

如何解除 outlook 2016 附件大小的限制

如何在python中通过引用调用静态方法[重复]

如何在python中通过命令行给出元组

在 Python 中通过 ElementTree 解析 xml 时如何保留命名空间

如何在 Python Paramiko 中通过 HTTP 代理 ssh?