Код, который у меня ниже, отлично работает, но я тестирую это на тестовом электронном письме, и у него есть только около 5 электронных писем. На моей фактической учетной записи электронной почты у меня есть по крайней мере 4k электронной почты на моем почтовом ящике.Показывать определенное количество писем в imaplib
Есть ли способ показать определенное количество писем. Например, показывать только первые 20 последних писем? А потом после этого сказать, когда нажимается кнопка будет показывать следующие 20 писем ...
import sys
import imaplib
import getpass
import email
import email.header
import datetime
email_address = "[email protected]"
password = "123456"
M = imaplib.IMAP4('mail.company.net')
rows = []
try:
M.login(email_address, password)
print "LOGIN SUCCESS!"
except imaplib.IMAP4.error:
print "LOGIN FAILED!!"
rv, data = M.select("INBOX")
rv, data = M.search(None, "ALL")
for num in data[0].split():
rv, data = M.fetch(num, '(RFC822)')
msg = email.message_from_string(data[0][1])
subj = msg['Subject']
to = msg['To']
frm = msg['From']
body = msg.get_payload()
print subj, " ", to, " ", frm, " ", body
M.close()
M.logout()
Я сожалею, но я действительно с трудом пытаясь понять это. Самое последнее, я узнал, что я могу получить общее количество писем
num_msgs = int(data[0])
print 'You have a total of %d messages' % num_msgs
И если id_list[-1]
получить последнюю версию идентификатор электронной почты, я могу сделать что-то вроде id_list[-1] + 19
или что-то, чтобы он мог получить 20 самых последних по электронной почте?
Я бы очень признателен за помощь в достижении желаемого результата. Спасибо.
До сих пор я
ids = data[0]
id_list = ids.split()
latest_email_id = id_list[-1] #gets most recent email
for i in latest_email_id:
if i > 21:
rv, data = M.fetch(num, '(RFC822)')
msgrecent = email.message_from_string(data[0][1])
subjs = msgrecent['Subject']
print "only print 20 most recent email"
print subjs
else:
print "none"
Как я могу изменить это, чтобы получить выход мне нужно? Спасибо
Последнее обновление:
Я обновил код следующим:
ids = data[0]
id_list = ids.split()
for num in id_list[0:10]:
rv, data = M.fetch(num, '(RFC822)')
msg = email.message_from_string(data[0][1])
subj = msg['Subject']
to = msg['To']
frm = msg['From']
body = msg.get_payload()
print subj
Воспроизводит в порядке возрастания
first
second
third
fourth
.
.
.
.
tenth
поэтому я решил добавить -1
так что он будет сортировать по убыванию
ids = data[0]
id_list = ids.split()
for num in id_list[0:10:-1]:
rv, data = M.fetch(num, '(RFC822)')
msg = email.message_from_string(data[0][1])
subj = msg['Subject']
to = msg['To']
frm = msg['From']
body = msg.get_payload()
print subj
но когда я сделал это, я не получил никакого выхода.
Любая идея о том, как я могу это исправить? Thank You
Возможно, есть способ, вы что-то пробовали? – Julien
, кроме поиска в google и повторного чтения библиотек imaplib, ничего еще – hocuspocus31
Как насчет хранения списка uids где-то и только глядя на последние двадцать из них? – Max