2016-08-12 10 views
0

以下のコードは素晴らしいですが、テスト用の電子メールでテストしています。 私の実際のメールアカウントには、受信トレイに少なくとも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() 

後、私は申し訳ありませんが、私は本当にこれを理解しようと苦労しています。私が学んだ最も最近のそれは20の最も最近の電子メールを得ることができるので、私は電子メール

num_msgs = int(data[0]) 
print 'You have a total of %d messages' % num_msgs 

そしてid_list[-1]場合の総数は、最新の電子メールIDを取得することができます得ることができるということですが、私はid_list[-1] + 19か何かのような何かを行うことができますか?

私は希望の出力を達成するための助けに本当に感謝します。ありがとうございました。

これまでのところ私は

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 

しかし、私がしたとき、私は何の出力も得られませんでした。

どのように私はこれを修正することができますか? ありがとう

+0

おそらく方法があります。何か試しましたか? – Julien

+0

グーグル上での検索とimaplibライブラリの再読み込み以外のものはまだありません – hocuspocus31

+0

どこかでuidのリストを保存し、最後の20個だけを見てみましょうか? – Max

答えて

0

私は既に私が望む出力を持っていることに気付きました。これは指定された数の電子メールだけを出力することです。

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]に変更することができます私は別の問題がありますが、私は別の投稿でそれを尋ねます。しかし、これまでのところ私は必要なものの半分を持っていますので、ここで私の解決策を掲載します。

関連する問題