Python GMail IMAP 不返回 UID



我使用imaplib和Python来获取收件箱或GMail标签的内容。

我的问题是:当我查询收件箱时,imaplib会返回UID,但不会返回我的电子邮件标签。

如果我查询收件箱,我会得到UID:

inbox EMAIL_UIDS: 24408 24599 25193 25224 25237 25406 25411 25412 25413 25415

但是,如果我查询我的标签"New"(它包含收件箱中的两条消息,因此应该包含上面的两个UID),我只得到有序的索引:

New EMAIL_UIDS: 1 2

我的代码是:

#Main file
if folder_name is None:
email_uids = obtain_inbox_email_uids(mail)
else:
email_uids = obtain_folder_email_uids(folder_name,mail)
email_uids = list(email_uids)

和:

#Email utilities file
def obtain_folder_email_uids(folder_name, mail):
"""
Given an IMAP instance,
return the UIDs of the emails in a specific folder.
"""
mail.select(folder_name)
result, data = mail.uid('search', None, "ALL")
print "RESULT, DATA",result,data
email_uids = data[0]
print folder_name,"EMAIL_UIDS:",email_uids
email_uids = email_uids.split(" ")
email_uids = reversed(email_uids)
return email_uids
def obtain_inbox_email_uids(mail):
"""
Given an IMAP instance,
return the UIDs of the inbox emails.
"""
return obtain_folder_email_uids('inbox', mail)

有人知道为什么imaplib会返回收件箱的UID,但会为特定标签排序索引吗?我该如何让它返回UID?

谢谢

发现问题。UID被正确返回。

我的问题是:我使用了一个基于UID手动获取电子邮件的函数。因此,在收件箱的情况下,我获得了UID,然后使用此功能获取特定的每封邮件。每个标签都一样。

然而,每封特定的电子邮件都会返回收件箱,但在标签的情况下,我无法提取每封邮件。因此,我认为我没有向函数传递正确的UID。

我的错误与此无关。在获取特定邮件的功能中,我总是从收件箱中获取邮件,而不是从有问题的标签中获取邮件。

因此,在这种情况下,对于收件箱,我会获得一个UID列表,然后使用此功能成功获取特定邮件中的每封邮件,但在特定GMail标签的情况下,我会获取UID列表,但由于我在收件箱上执行选择,因此无法获取每封特定邮件。

将收件箱中的选择更改为提取每个特定邮件的功能中的特定标签,现在效果非常好。

IMAP UID对于每个邮箱都是唯一的如果您刚刚创建了邮箱,那么1和2几乎可以肯定是这两条消息的正确UID。为什么你认为他们不是?

最新更新