python imaplib para obtener los títulos de los temas de la bandeja de entrada de gmail y el nombre del remitente

Estoy usando pythons imaplib para conectarme a mi cuenta de gmail. Quiero recuperar los 15 mensajes principales (no leídos o leídos, no importa) y mostrar solo los asuntos y el nombre del remitente (o dirección) pero no sé cómo mostrar el contenido de la bandeja de entrada.

Aquí está mi código hasta ahora (conexión exitosa)

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

Creo que esto debería ser lo suficientemente simple, simplemente no estoy lo suficientemente familiarizado con los comandos para la biblioteca imaplib. Cualquier ayuda sería apreciada ...

ACTUALIZA Gracias a Julian, puedo recorrer cada mensaje y recuperar todo el contenido con:

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

pero solo quiero al sujeto y al remitente. ¿Existe un comando imaplib para estos elementos o tendré que analizar todo el contenido de los datos [0] [1] para el texto: Asunto y Remitente?

ACTUALIZA OK, conseguí que el asunto y la parte del remitente funcionaran, pero la iteración (1, 15) se realiza por orden desc aparentemente, mostrándome primero los mensajes más antiguos. ¿Cómo puedo cambiar esto? Intenté hacer esto:

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

pero eso solo me daNone para las 15 iteraciones ... ¿alguna idea? También probémail.sort('REVERSE DATE', 'UTF-8', 'ALL') pero gmail no admite la función .sort ()

ACTUALIZA Descubrí una forma de hacerlo:

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

Esto me da el asunto más reciente de 15 mensajes y la dirección del remitente en orden descendente según lo solicitado! ¡Gracias a todos los que ayudaron

Respuestas a la pregunta(4)

Su respuesta a la pregunta