Python GMail IMAP不返回UID

时间:2012-11-20 15:58:56

标签: python gmail imaplib

我正在使用带有Python的imaplib来获取收件箱或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?

谢谢

2 个答案:

答案 0 :(得分:5)

发现问题所在。 UID正在正确返回。

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

但是,每个特定的电子邮件都是为收件箱返回的,但在标签的情况下,我无法获取每封邮件。因此我假设我没有将正确的UID传递给函数。

我的错误与此无关。在获取特定邮件的函数内部,而不是从相关标签中获取它,我总是从收件箱中取出。

所以在这种情况下,对于收件箱,我会获得一个UID列表,然后使用此函数成功获取特定的每个邮件,但在特定的GMail标签的情况下,我将获得UID列表,然后失败获取每个特定邮件,因为我在收件箱中执行选择。

将选择从收件箱更改为获取每个特定邮件的函数内的特定标签,现在工作正常。

答案 1 :(得分:2)

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