我正在尝试从邮件中获取所有标签,但似乎我无法获取当前选择的标签,因此,当我想将邮件从一个标签移动到另一个标签时,我无法删除它.
这是我正在努力做的一个例子:
我有一个名为“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),但最后我得到了相同的结果。
当您选择与 label 对应的文件夹时,它不会显示,因为 labels 隐式是当前文件夹
如果你想获得标签,你可以使用
X-GM-LABELS
不依赖于选定的文件夹,
还更新一下:
raw_data = data[0][1] if isinstance(data[0], tuple) else data[0]