77593


### やりたいこと

gmailに複数の未読メールがあっても一つだけを読み込みたいです。  
現在は下記のコードだと全ての未読メールが読み込まれます。  
一つだけを読み込みするため、どのように指定すればよろしいでしょうか。

[code]

    import imaplib, re, email, six, dateutil.parser
    
    mail=imaplib.IMAP4_SSL('example.gmail.com',993)     #SMTPは993,POPは995
    mail.login('example@jp','exam123')
    mail.select('example.jp')   #メールボックスの選択
    
    #UNSEEN未読メールを読み込む
    type,data=mail.search(None,'UNSEEN') #メールボックス内にあるすべてのデータを取得ALL
    
    for i in data[0].split():   #data分繰り返す
     ok,x=mail.fetch(i,'RFC822')    #メールの情報を取得
     ms=email.message_from_string(x[0][1].decode('iso-2022-jp'))    #パースして取得
    
     #差出人を取得
     ad=email.header.decode_header(ms.get('From'))
     ms_code=ad[0][1]
     if(ms_code!=None):
      address=ad[0][0].decode(ms_code)
      address+=ad[1][0].decode(ms_code)
     else:
      address=ad[0][0]
     
     #タイトルを取得
     sb=email.header.decode_header(ms.get('Subject'))
     ms_code=sb[0][1]
     if(ms_code!=None):
      sbject=sb[0][0].decode(ms_code)
     else:
      ms_code=sb[1][1]
      sbject=sb[1][0].decode(ms_code)
     
     #本文を取得
     maintext=ms.get_payload()
    
     mail.store(i,'+FLAGS', '\\Seen')
    
     #メールの日時を取得
     time = dateutil.parser.parse(ms.get('Date')).strftime("%Y-%m-%d %H:%M")[:-1]
     print(time)
    
     #出力
     print(sbject)
     print(address)
     print(maintext)
     
    mail.close()
    mail.logout()
    
[/code]


CC BY-SA 4.0
2021-06-15T09:23:39.520
77576
2021-06-16T06:51:21.457
2021-06-16T06:51:21.457
3060
18859
question
python python3 gmail
imaplib モジュールで未読メールを指定件数のみ読み込みたい


単純にfor文の末尾で`break`する方法で対応可能です。

またはfor文を使わずに`ok,x=mail.fetch(i,'RFC822')`を  
`ok,x=mail.fetch(data[0].split()[0], 'RFC822')`に書き換える方法もあります。

本家SOの類似質問  
[Python imaplib: get the first unread
email](https://stackoverflow.com/q/66401210)

※[コメント](https://ja.stackoverflow.com/questions/77576/imaplib-%e3%83%a2%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%ab%e3%81%a7%e6%9c%aa%e8%aa%ad%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%92%e6%8c%87%e5%ae%9a%e4%bb%b6%e6%95%b0%e3%81%ae%e3%81%bf%e8%aa%ad%e3%81%bf%e8%be%bc%e3%81%bf%e3%81%9f%e3%81%84#comment87676_77576)を回答化しました。


CC BY-SA 4.0
2021-06-16T04:23:30.413
77593
2021-06-16T06:50:54.483
2021-06-16T06:50:54.483
3060
9820
77576
answer