Sto usando pythons imaplib per connettermi al mio account gmail. Voglio recuperare i primi 15 messaggi (da leggere o leggere, non importa) e visualizzare solo i soggetti e il nome del mittente (o indirizzo) ma non so come visualizzare il contenuto della casella di posta.python imaplib per ottenere posta in arrivo gmail titoli titoli e nome mittente
Ecco il mio codice finora (connessione riuscita)
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()
credo che questo dovrebbe essere abbastanza semplice, mi basta che non hanno familiarità con i comandi per la libreria imaplib. Qualsiasi aiuto sarebbe apprezzato ... deve
UPDATE grazie a Julian posso scorrere ogni messaggio e recuperare l'intero contenuto 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()
ma sto volendo solo il soggetto e il mittente. Esiste un comando imaplib per questi elementi o dovrò analizzare l'intero contenuto dei dati [0] [1] per il testo: Subject e Sender?
UPDATE OK, ha ottenuto la parte oggetto e il mittente di lavoro, ma l'iterazione (1, 15) è fatto per ordine decrescente a quanto pare mi mostra i messaggi meno recenti. Come posso cambiare questo? Ho provato a fare questo:
for i in range(len(data[0])-15, len(data[0])):
print data
ma che semplicemente mi dà None
per tutti i 15 iterazioni ... tutte le idee? Ho anche provato mail.sort('REVERSE DATE', 'UTF-8', 'ALL')
ma pretende molto gmail supporta la funzione .Sort()
UPDATE trovato un modo per farlo:
#....^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
questo mi dà la più recente soggetto 15 messaggio e mittente indirizzo in ordine decrescente come richiesto! Grazie a tutti coloro che hanno aiutato!
L'esempio dalla documentazione Python funziona bene per me: http://docs.python.org/library/ imaplib # imap4-example – Julian
Sì, hai ragione, funziona tranquillamente per recuperare il contenuto completo del messaggio di tutti i messaggi. Voglio solo il soggetto e l'indirizzo del mittente però. Posso quindi creare il ciclo for solo da 1 a 15 – sadmicrowave
E un altro collegamento ai documenti Python: http://docs.python.org/library/email.html;) – Julian