簡體   English   中英

僅在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]我還有另一個問題,但是我將在另一篇文章中提出。 但是到目前為止,我只需要一半的東西,所以我將在這里發布我的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM