如何在 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”?的主要内容,如果未能解决你的问题,请参考以下文章