仅在 imaplib 中显示一定数量的电子邮件
Only show certain number of emails in imaplib
我下面的代码运行良好,但我正在用测试电子邮件对其进行测试,它只有大约 5 封电子邮件。
在我的实际电子邮件帐户中,我的收件箱中至少有 4k 封电子邮件。
有没有办法让我显示一定数量的电子邮件。例如,只显示最近的前 20 封电子邮件?然后在那之后说当点击一个按钮时它会显示接下来的 20 封电子邮件...
import sys
import imaplib
import getpass
import email
import email.header
import datetime
email_address = "email@company.net"
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,我可以做一些类似 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
但是当我这样做时,我没有得到任何输出。
知道如何解决这个问题吗?
谢谢
我刚刚意识到我已经有了我想要的输出,也就是只输出指定数量的电子邮件。
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
其中 id_list[0:10]:
将输出我收件箱中的前 10 封电子邮件。如果我需要输出 20,可以将其修改为 id_list[0:20]
我还有一个问题,但我会在另一个 post 上询问。但到目前为止,我已经得到了我需要的一半,所以我将 post 我的解决方案放在这里。
我下面的代码运行良好,但我正在用测试电子邮件对其进行测试,它只有大约 5 封电子邮件。 在我的实际电子邮件帐户中,我的收件箱中至少有 4k 封电子邮件。
有没有办法让我显示一定数量的电子邮件。例如,只显示最近的前 20 封电子邮件?然后在那之后说当点击一个按钮时它会显示接下来的 20 封电子邮件...
import sys
import imaplib
import getpass
import email
import email.header
import datetime
email_address = "email@company.net"
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,我可以做一些类似 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
但是当我这样做时,我没有得到任何输出。
知道如何解决这个问题吗? 谢谢
我刚刚意识到我已经有了我想要的输出,也就是只输出指定数量的电子邮件。
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
其中 id_list[0:10]:
将输出我收件箱中的前 10 封电子邮件。如果我需要输出 20,可以将其修改为 id_list[0:20]
我还有一个问题,但我会在另一个 post 上询问。但到目前为止,我已经得到了我需要的一半,所以我将 post 我的解决方案放在这里。