无法从邮件中获取主标签

问题描述 投票:0回答:1

我正在尝试从邮件中获取所有标签,但似乎我无法获取当前选择的标签,因此,当我想将邮件从一个标签移动到另一个标签时,我无法删除它.

这是我正在努力做的一个例子:

我有一个名为“POTATO”的标签,其子标签为“POTATO/Done”和“POTATO/Error”。 我还有第二个标签,是为了尝试一些名为“POTATO2”的东西而制作的。

这是我的代码示例:

import imaplib

imap_name = "[email protected]"
imap_pass = "mypassword"

M = imaplib.IMAP4_SSL('imap.gmail.com', 993)
M.login(imap_name, imap_pass)
M.select("POTATO")
resp, data = M.uid('search', None, 'ALL')
if resp == 'OK':
    uids = data[0].split()
    for uid in uids:
        resp, data = M.uid('fetch', uid, 'X-GM-LABELS')
        if resp == 'OK':
            raw_data = data[0]
            if isinstance(raw_data, bytes):
                raw_data = raw_data.decode('utf-8')
                
                # Parsing the labels to read them easier
                if 'X-GM-LABELS' in raw_data:
                    labels_start = raw_data.find('(') + 1
                    labels_end = raw_data.rfind(')')
                    labels_raw = raw_data[labels_start:labels_end].strip()
                    
                    cleaned_labels = labels_raw.replace('"', '').replace('\\', '').split()
                    print(f"Labels for UID {uid.decode('utf-8')}: {cleaned_labels[1]}")
                else:
                    print(f"No labels found for UID {uid.decode('utf-8')}")
            else:
                print(f"Error: expected bytes but got {type(raw_data)} for UID {uid.decode('utf-8')}")

输出:

Labels for UID 31: ['X-GM-LABELS', '(Important', 'POTATO/Done)', 'UID', '31']
Labels for UID 32: ['X-GM-LABELS', '(POTATO2)', 'UID', '32']

两封邮件都添加了“POTATO”标签,但它没有显示在那里,所以我不能简单地将其删除。我缺少什么?有没有办法从您选择的标签中获取标签?因为如果我选择“POTATO2”标签,第二封邮件将只有“POTATO”标签。

我尝试创建多个标签来检查它是否与第一个标签相关,但似乎没有任何关系。我还尝试了不同的库(IMAPClient),但最后我得到了相同的结果。

python gmail imaplib
1个回答
0
投票

当您选择与 label 对应的文件夹时,它不会显示,因为 labels 隐式是当前文件夹

如果你想获得标签,你可以使用

X-GM-LABELS
不依赖于选定的文件夹,

还更新一下:

raw_data = data[0][1] if isinstance(data[0], tuple) else data[0]
© www.soinside.com 2019 - 2024. All rights reserved.