问题描述
这是代码(已导入库):
mail.select('"[Gmail]/Sent Mail"')
typ,messageIds = mail.search(None,"SEEN")
messageIdsstring = str(messageIds[0],encoding='utf-8')
listofmessages = messageIdsstring.split(" ")
nbr = len(listofmessages)
if len(listofmessages)== 0:
print("You Have No Mails On InBox")
elif len(listofmessages)== 0:
print("You Have No Mails On Spam")
else :
print("You Have ",nbr,"New Emails InBox")
如果有人可以帮忙,我不知道该怎么办
解决方法
我不知道你的问题是什么 - 你没有描述细节 - 但是当我测试这段代码时
result = mail.select('"[Gmail]/Sent Mail"')
print(result)
然后显示看到
('NO',[b'[NONEXISTENT] Unknown Mailbox: [Gmail]/Sent Mail (Failure)'])
使用此代码显示所有文件夹
result = mail.list()
for folder in result[1]:
print( folder.decode('utf-8') )
我发现我没有 [Gmail]/Sent Mail
,而是使用母语(波兰语)"[Gmail]/Wys&AUI-ane"
(我在 GMail 中将其视为 [GMail]/Wysłane
)。我对文件夹 Draft
、Spam/Junk
、Trash
也有同样的问题 - 所以也许你有不同名称的类似问题。
使用 mail.list()
和标志 \\Sent
,\\Drafts
,\\Junk
,\\Trash
我可以获得这些文件夹的本机名称。
def detect_names():
"""Detect native names for standard folders (using flags)."""
keys = {
#'\\Inbox': 'INBOX','\\Sent': 'SENT','\\Drafts': 'DRAFTS','\\Junk': 'JUNK','\\Trash': 'TRASH','\\Important': 'IMPORTANT','\\All': 'ALL',}
result = {
'INBOX': 'INBOX','SENT': None,'DRAFTS': None,'JUNK': None,'TRASH': None,'IMPORTANT': None,'ALL': None,}
data = mail.list()
for folder in data[1]:
all_flags,name = folder.decode('utf-8').split(' "/" ')
for flag,key in keys.items():
if flag in all_flags:
result[key] = name
return result
这里是我用于测试的完整代码
import imaplib
import getpass
def display_folders():
"""Display all folders (with native names) and flags."""
result = mail.list()
#print('[DEBUG] (mail.list) result:',result)
for folder in result[1]:
print(folder.decode('utf-8'))
#flags,name = folder.decode('utf-8').split(' "/" ')
#print(flags,name)
def detect_names():
"""Detect native names for standard folders (using flags)."""
keys = {
#'\\Inbox': 'INBOX',key in keys.items():
if flag in all_flags:
result[key] = name
return result
def test(names):
"""Check number of mails in `Sent`."""
#result = mail.select('"[Gmail]/Sent Mail"')
#result = mail.select('"[Gmail]/Wys&AUI-ane"')
result = mail.select(names['SENT'])
#print('[DEBUG] (mail.select) result:',result)
# - SEEN -
typ,msg_ids = mail.search(None,'SEEN')
#print('[DEBUG] (mail.search) result:',result)
number_SEEN = len(msg_ids[0])
print('number SEEN:',number_SEEN)
# - ALL -
typ,'ALL')
#print('[DEBUG] (mail.search) result:',result)
number_ALL = len(msg_ids[0])
print('number ALL :',number_ALL)
# - diff -
diff = number_ALL - number_SEEN
print(' diff:',diff)
#for num in msg_ids[0].split():
# typ,data = mail.fetch(num,'(RFC822)')
# print('Message ',num)
# #print(data[0][1])
mail.close()
# --- main ---
login = input('Login: ')
password = getpass.getpass()
# ---
mail = imaplib.IMAP4_SSL('imap.gmail.com',993)
mail.login(login,password)
# - folders -
print('\n--- folders ---\n')
display_folders()
# - native names -
names = detect_names()
print('\n--- native names ---\n')
for key,name in names.items():
print(f'{key:9} ---> {name}')
# - test -
print('\n--- test ---\n')
test(names)
# - end -
mail.logout()
顺便说一句:
模块 IMAPClient 具有此功能
client.find_special_folder(imapclient.imapclient.SENT))