Python imaplib, um Gmail-Postfächer Themen Titel und Absender Name zu erhalten

Ich bin mit pythons imaplib, eine Verbindung zu meinem Google Mail-Konto. Ich will abrufen die top 15 der Nachrichten (ungelesen oder gelesen, es spielt keine Rolle) und zeigt nur die Themen und Absender-name (oder Adresse), wissen aber nicht, wie die Anzeige der Inhalt des Posteingangs.

Hier ist mein code bisher (bei erfolgreicher Verbindung)

import imaplib

mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('[email protected]', 'somecrazypassword')
mail.list()
mail.select('inbox')

#need to add some stuff in here

mail.logout()

Ich glaube, das sollte einfach genug sein, ich bin einfach nicht vertraut genug mit den Befehlen für die imaplib Bibliothek. Jede Hilfe wäre müssen geschätzt...

UPDATE
Dank Julian, ich kann die Iteration über jede Nachricht und ruft den gesamten Inhalt durch:

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()

aber ich wollte nur den Betreff und den Absender. Gibt es eine imaplib Befehl für diese Elemente oder muss ich analysieren den gesamten Inhalt von data[0][1] zum text: Thema und Absender?

UPDATE
OK, hab den Betreff und Absender Teil arbeiten, aber die iteration (1, 15) erfolgt, die von desc, um scheinbar zeigt mir die ältesten Nachrichten zuerst. Wie kann ich dies ändern? Ich habe versucht, dies zu tun:

for i in range( len(data[0])-15, len(data[0]) ):
     print data

aber das macht mir einfach None für alle 15 Iterationen... irgendwelche Ideen? Ich habe auch versucht mail.sort('REVERSE DATE', 'UTF-8', 'ALL') aber gmail nicht unterstützen .sort () - Funktion

UPDATE
Herausgefunden, einen Weg, es zu tun:

#....^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

gibt mir das die letzten 15 Betreff und Absender-Adresse in der absteigenden Reihenfolge wie gewünscht! Vielen Dank an alle die geholfen haben!

InformationsquelleAutor der Frage sadmicrowave | 2011-09-06

Schreibe einen Kommentar