Używam pythons imaplib do łączenia się z moim kontem Gmail. Chcę pobrać 15 najlepszych wiadomości (nieprzeczytanych lub przeczytanych, nie ma to znaczenia) i wyświetlić tylko tematy i nazwę nadawcy (lub adres), ale nie wiem, jak wyświetlić zawartość skrzynki odbiorczej.python imaplib, aby uzyskać skrzynki pocztowe w Gmailu, tytuły i nazwę nadawcy
Oto mój kod tak daleko (udane połączenie)
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()
Wierzę, że to powinno być na tyle proste, że jestem na tyle zaznajomiony z poleceniami dla biblioteki imaplib. Każda pomoc będzie mile widziane ...
musiUPDATE dzięki Julian mogę iterację każdej wiadomości i pobrać całą zawartość z:
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()
ale ja chce tylko przedmiot i nadawca. Czy istnieje polecenie imaplib dla tych elementów lub czy będę musiał przeanalizować całą zawartość danych [0] [1] dla tekstu: Temat i Nadawca?
UPDATE OK, dostał przedmiot i nadawcy część działa, ale iteracji (1, 15) jest wykonana na zlecenie malejąco najwyraźniej pokazuje mi najpierw najstarsze wiadomości. Jak mogę to zmienić? Próbowałem w ten sposób:
for i in range(len(data[0])-15, len(data[0])):
print data
ale to właśnie daje mi None
dla wszystkich 15 powtórzeń ... jakieś pomysły? Próbowałem zostały również mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
ale robi Gmail obsługuje funkcji .sort()
UPDATE wymyśliliśmy sposób, aby to zrobić:
#....^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
to daje mi ostatnią wiadomość 15 temat i nadawcę adres w porządku malejącym zgodnie z żądaniem! Dziękuję wszystkim, którzy pomogli!
Przykład z docs Python działa dobrze dla mnie: http://docs.python.org/library/ imaplib # imap4-example – Julian
Tak, masz rację, to działa bardzo dobrze, aby pobrać pełną treść wiadomości ze wszystkich wiadomości. Chcę tylko temat i adres nadawcy. Mogę wtedy utworzyć pętlę for od 1 do 15 – sadmicrowave
I jeszcze jeden link do dokumentacji w Pythonie: http://docs.python.org/library/email.html;) – Julian