我有很多X-GM-THRID,我想要检索这些线程的uid列表。
https://developers.google.com/gmail/imap_extensions描述了如何为单个X-GM-THRID找到这些。但是,如果我可以为我想要数据的所有X-GM-THRID做出一个请求,那就太好了。当我尝试这个时,我只得到错误代码。
有人知道这是否可行?
我正在使用python并做类似的事情:
res, ids = imap_conn.uid('search', 'X-GM-THRID', thread_id)
# this works fine.
但我想做点什么:
res, ids = imap_conn.uid('search', 'X-GM-THRID', [thread_id1, thread_id2])
更新:
在@max的答案之后,我现在正在做这样的事情:res, ids = imap_conn.uid(
'search', None,
'(OR (OR (X-GM-THRID 123) X-GM-THRID 456) X-GM-THRID 789)')
# 123, 456, 789 are fake gmail thread ids
我不确定gmail究竟是什么或如何限制搜索长度 - 我认为它可能是字符数而不是查询中“OR”的数量。在gmail开始返回错误之前,我可以逃脱大约9个。
答案 0 :(得分:2)
您需要添加“或”限定符,然后构建扩展搜索查询。有关搜索格式,请参阅RFC 3501。
答案 1 :(得分:-1)
我可以使用以下代码集从线程ID获取UID。
from imaplib import IMAP4_SSL
mail = IMAP4_SSL('imap.gmail.com')
mail.login(<Email>,<password>)
mail.select('INBOX')
result, uid = mail.uid('search',None,"ALL") # Get all the UIDs
uid_list = []
for uids in uid[0].split():
uid_list.append(uids)
for p in uids_list:
result, data = mail.uid('fetch', p, '(X-GM-THRID)')
q = data[0].split() #splitting all thread IDs into list.
m = q[2]
res, ids = mail.uid('search', 'X-GM-THRID', m)
w = ids[0].split()
print w # printing UIDs related to Thread-IDs
首先,我从收件箱中获取所有UID并使用这些UID我正在搜索Thread-ID并使用这些Thread-ID我再次获得与特定Thread-ID相关的UID。