我在使用 Imaplib 访问和计算已发送邮件时遇到问题
I have a problem To Access And Count Sent Mails Using Imaplib
这是代码(已经导入库):
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',
'\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
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, msg_ids = mail.search(None, '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))
这是代码(已经导入库):
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',
'\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
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, msg_ids = mail.search(None, '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))