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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies sollte Ihnen eine Idee geben, wie das abrufen des Subjekts und aus?
InformationsquelleAutor der Antwort Torxed
Für diejenigen, die wie, um zu überprüfen E-mail und Parsen der Header, das ist, was ich verwendet habe:
InformationsquelleAutor der Antwort namit
Ich war auf der Suche nach einem fertigen einfaches Skript zum auflisten der letzten Posteingang via IMAP ohne Sortierung durch alle Nachrichten. Die Informationen hier nützlich, auch wenn DIY und findet einige Aspekte. Erste,
IMAP4.wählen Sie aus
gibt Nachrichtenanzahl. Zweite, Betreff Decodierung ist nicht einfach.InformationsquelleAutor der Antwort saaj
Dies war meine Lösung, um das nützliche bits von Informationen aus E-Mails:
InformationsquelleAutor der Antwort Edward Chapman