2

Python で imaplib を使用して、受信トレイまたは GMail ラベルの内容を取得しています。

私の問題は次のとおりです。imaplib は、受信トレイを照会しているときに UID を返しますが、メール ラベルは返しません。

受信トレイにクエリを実行すると、UID が取得されます。

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

しかし、ラベル「New」(受信トレイに 2 つのメッセージが含まれているため、上記の UID が 2 つ含まれている必要があります) をクエリすると、順序付けられたインデックスのみが取得されます。

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 を返す方法を知っている人はいますか?

ありがとうございました

4

2 に答える 2

5

問題が見つかりました。UID は正しく返されていました。

私の問題は、UID に基づいてメールを手動でフェッチする関数を使用していたことです。そのため、受信トレイの場合、UID を取得してから、この関数を使用して各メールを具体的に取得しました。各ラベルで、同じ。

ただし、受信トレイには特定のメールが返されていましたが、ラベルの場合、各メールを取得できませんでした。したがって、関数に正しい UID を渡していないと思いました。

私の間違いは関係ありませんでした。特定のメールを取得する関数内では、問題のラベルから取得するのではなく、常に受信トレイから取得していました。

したがって、この場合、受信トレイの場合は UID のリストを取得し、この関数を使用して特定の各メールを正常に取得しますが、特定の GMail ラベルの場合は UID のリストを取得し、それぞれの取得に失敗します受信トレイで選択を行っていたため、特定のメール。

受信トレイからの選択を、特定のメールを取得する関数内の特定のラベルに変更し、完全に機能するようになりました。

于 2012-11-20T17:10:50.870 に答える
1

IMAP UID はメールボックスごとに一意です。メールボックスを作成したばかりであれば、1 と 2 がこれら 2 つのメッセージの正しい UID であることはほぼ間違いありません。なぜそうではないと思いますか?

于 2012-11-20T16:03:01.700 に答える