Python Imaplib для получения названий субъектов Gmail входящими в папки «Имя отправителя

Я использую Pythons iMaplib для подключения к моему аккаунт Gmail. Я хочу получить топ-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. Любая помощь должна быть оценена ...

Обновление Благодаря Джулиану я могу повторить каждое сообщение и получить все содержимое с:

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 для этих предметов или мне придется разбирать все содержимое данных [0] [1] для текста: субъект и отправитель?

Обновление Хорошо, работала в теме и отправителя, но итерация (1, 15) выполняется по порядку Спс, по-видимому, показывая мне самые старые сообщения. Как я могу изменить это? Я попытался сделать это:

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

Но это просто дает мне Нет для всех 15 итаций ... Любые идеи? Я также попробовал mail.sort («обратная дата», «UTF-8», «все») , но 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 учебных предметов и адреса отправителя в приведенном порядке по требованию! Спасибо всем, кто помог!

22
задан Gilles 'SO- stop being evil' 5 May 2012 в 18:04
поделиться