with recibir receive read how example correo and python email imap

recibir - Obteniendo los correos electrónicos más recientes usando IMAP y Python



python receive email (2)

Estoy buscando devolver los n (más de 10) correos electrónicos más recientes de una bandeja de entrada de cuentas de correo electrónico usando IMAP.

Hasta ahora he improvisado:

import imaplib from email.parser import HeaderParser M = imaplib.IMAP4_SSL(''my.server'') user = ''username'' password = ''password'' M.login(user, password) M.search(None, ''ALL'') for i in range (1,10): data = M.fetch(i, ''(BODY[HEADER])'') header_data = data[1][0][1] parser = HeaderParser() msg = parser.parsestr(header_data) print msg[''subject'']

Esto devuelve los encabezados de los correos electrónicos bien, pero parece ser una colección de correos electrónicos semi-aleatorios, no los 10 más recientes.

Si esto ayuda, me estoy conectando a un servidor de Exchange 2010. Otros enfoques también son bienvenidos, IMAP simplemente me pareció el más apropiado, dado que solo quería leer los correos electrónicos y no enviarlos.


El comando de ordenación está disponible, pero no está garantizado que sea compatible con el servidor IMAP. Por ejemplo, Gmail no es compatible con el comando SORT.

Para probar el comando ordenar, reemplazaría:
M.search(None, ''ALL'')
con
M.sort(search_critera, ''UTF-8'', ''ALL'')

Entonces search_criteria sería una cadena como:

search_criteria = ''DATE'' #Ascending, most recent email last search_criteria = ''REVERSE DATE'' #Descending, most recent email first search_criteria = ''[REVERSE] sort-key'' #format for sorting

De acuerdo con RFC5256 estas son sort-key válidas:
"ARRIVAL" / "CC" / "DATE" / "FROM" / "SIZE" / "SUBJECT" / "TO"

Notas:
1. se requiere US-ASCII caracteres, pruebe US-ASCII o UTF-8 todos los demás no están obligados a ser compatibles con el servidor IMAP
2. Critera de búsqueda también es requerido. El comando ALL es válido, pero hay muchos. Ver más en http://www.networksorcery.com/enp/rfc/rfc3501.txt

El mundo de IMAP es salvaje y loco. Buena suerte


esto es trabajo para mi ~

import imaplib from email.parser import HeaderParser M = imaplib.IMAP4_SSL(''my.server'') user = ''username'' password = ''password'' M.login(user, password) (retcode, messages) =M.search(None, ''ALL'') news_mail = get_mostnew_email(messages) for i in news_mail : data = M.fetch(i, ''(BODY[HEADER])'') header_data = data[1][0][1] parser = HeaderParser() msg = parser.parsestr(header_data) print msg[''subject'']

y esto es obtener la función de correo electrónico más nueva:

def get_mostnew_email(messages): """ Getting in most recent emails using IMAP and Python :param messages: :return: """ ids = messages[0] # data is a list. id_list = ids.split() # ids is a space separated string #latest_ten_email_id = id_list # get all latest_ten_email_id = id_list[-10:] # get the latest 10 keys = map(int, latest_ten_email_id) news_keys = sorted(keys, reverse=True) str_keys = [str(e) for e in news_keys] return str_keys