Gmailアカウントに接続するためにpythonsimaplibを使用しています。上位15件のメッセージ(未読または未読、関係ありません)を取得し、件名と送信者名(またはアドレス)のみを表示したいのですが、受信トレイの内容を表示する方法がわかりません。
これがこれまでの私のコードです(成功した接続)
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('mygmail@gmail.com', 'somecrazypassword')
mail.list()
mail.select('inbox')
#need to add some stuff in here
mail.logout()
これは十分に単純なはずだと思います。imaplibライブラリのコマンドに精通していません。どんな助けもありがたいです...
更新 Julianのおかげで、各メッセージを繰り返し処理し、次のコマンドでコンテンツ全体を取得できます。
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
typ, data = mail.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][1])
mail.close()
しかし、私は件名と送信者だけが欲しいのです。これらのアイテムにimaplibコマンドがありますか、それともテキストのdata [0] [1]の内容全体を解析する必要があります:件名と送信者?
UPDATE OK、件名と送信者の部分が機能するようになりましたが、反復(1、15)はdesc orderによって実行され、明らかに最も古いメッセージが最初に表示されます。どうすればこれを変更できますか?私はこれをやってみました:
for i in range( len(data[0])-15, len(data[0]) ):
print data
しかし、それは私に15回の反復すべてを与えるだけNone
です...何かアイデアはありますか?私も試しましmail.sort('REVERSE DATE', 'UTF-8', 'ALL')
たが、Gmailは.sort()関数をサポートしていません
更新 それを行う方法を考え出しました:
#....^other code is the same as above except need to import email module
mail.select('inbox')
typ, data = mail.search(None, 'ALL')
ids = data[0]
id_list = ids.split()
#get the most recent email id
latest_email_id = int( id_list[-1] )
#iterate through 15 messages in decending order starting with latest_email_id
#the '-1' dictates reverse looping order
for i in range( latest_email_id, latest_email_id-15, -1 ):
typ, data = mail.fetch( i, '(RFC822)' )
for response_part in data:
if isinstance(response_part, tuple):
msg = email.message_from_string(response_part[1])
varSubject = msg['subject']
varFrom = msg['from']
#remove the brackets around the sender email address
varFrom = varFrom.replace('<', '')
varFrom = varFrom.replace('>', '')
#add ellipsis (...) if subject length is greater than 35 characters
if len( varSubject ) > 35:
varSubject = varSubject[0:32] + '...'
print '[' + varFrom.split()[-1] + '] ' + varSubject
これにより、要求に応じて、最新の15件のメッセージの件名と送信者アドレスが降順で表示されます。助けてくれたすべての人に感謝します!