2011-12-29 55 views
7

Me gustaría iniciar sesión en mi cuenta con Python y obtener python para imprimir los mensajes que recibí en mi buzón de correo. Sé cómo conectarObtener correos electrónicos con Python y poplib

import getpass, poplib 
user = 'my_user_name' 
Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995') 
Mailbox.user(user) 
Mailbox.pass_('my_password') 

No sé cómo hacer que Python muestre mis mensajes. Probé todas las funciones en el documento poplib. Solo muestran números.

Respuesta

9

No ha publicado el código fuente, pero aquí está mi respuesta:

¿Cómo obtener el número total de mensajes:

(numMsgs, totalSize) = self.conn_pop3.stat() 

Cómo obtener un mensaje específico, conociendo su número en el buzón:

(server_msg, body, octets) = self.conn_pop3.retr(number) 

Así que la función que pueda necesitar es retr, devuelve una tupla. Ver here.

¡Cuidado también establece el correo electrónico respectivo como SEEN en el servidor! Probablemente puedas deshacer eso, al menos con IMAP puedes.

Y mi aplicación de un correo electrónico POP3 lib leer:

from poplib import POP3 
... 
    if self.pop3_connected:    
     try: 
      #------Check if email number is valid---------------------- 
      (numMsgs, totalSize) = self.conn_pop3.stat() 
      self.debug(200, "Total number of server messages: ", numMsgs)     
      self.debug(200, "Total size of server messages: ", totalSize) 
      if number>numMsgs: 
       self.debug(200, "\nSorry - there aren't that many messages in your inbox\n") 
       return False 
      else: 
       (server_msg, body, octets) = self.conn_pop3.retr(number) 
       self.debug(200, "Server Message: " , server_msg) 
       self.debug(200, "Number of Octets: " , octets) 
       self.debug(200, "Message body:") 
       for line in body: 
        print line 
       #end for 
       return True 
      #endif 
     finally: 
      self.__disconnect__()  
    #endif 

También aquí es la conexión POP3, al menos la forma en que he implementado ... más o menos complicado utilizando una comparación de cadenas, pero funcionó para mi aplicación:

def __connect_pop3__(self): 
    """\brief Method for connecting to POP3 server       
     \return True If connection to POP3 succeeds or if POP3 is already connected 
     \return False If connection to POP3 fails 
    """ 
    #------Check that POP3 is not already connected----------------------- 
    if not self.pop3_connected: 
     #------Connect POP3----------------------------------------------- 
     self.debug(100, 'Connecting POP3 with: ', self.host_name, self.user_name, self.pass_name) 
     self.conn_pop3 = POP3(self.host_name)    
     res1 = self.conn_pop3.user(self.user_name) 
     string1 = str(res1)  
     self.debug(100, 'User identification result:', string1) 
     res2 = self.conn_pop3.pass_(self.pass_name)   
     string2 = str(res2)     
     self.debug(100, 'Pass identification result:', string2)       
     #------Check if connection resulted in success-------------------- 
     #------Server on DavMail returns 'User successfully logged on'---- 
     if string2.find('User successfully logged on')<>-1 or string1.find('User successfully logged on')<>-1 : 
      self.pop3_connected = True    
      return True 
     else: 
      return False 
     #endif   
    else:  
     self.debug(255, 'POP3 already connected') 
     return True 
    #endif 
15

Usando el ejemplo POP3 from the docs:

import getpass, poplib 
user = 'my_user_name' 
Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995') 
Mailbox.user(user) 
Mailbox.pass_('my_password') 
numMessages = len(Mailbox.list()[1]) 
for i in range(numMessages): 
    for msg in Mailbox.retr(i+1)[1]: 
     print msg 
Mailbox.quit() 
+0

Es posible que desee [citar la fuente] (http://docs.python.org/library/ poplib.html # pop3-example) para esto. –

+0

larsmans, gracias. Me olvidé de grabar la fuente en mis notas. – unutbu

+0

gracias. Algunos de los mensajes son divertidos, están hechos de código extraño, otros tienen sentido. Pero no los obtengo en orden cronológico. Traté de llegar al final de la matriz y no me devolvió el último mensaje que recibí. – user1119429

-1

si desea utilizar IMAP4. Utilizar la biblioteca de Python perspectiva, descarga aquí: https://github.com/awangga/outlook

para recuperar mensajes no leídos desde la bandeja de entrada:

import outlook 
mail = outlook.Outlook() 
mail.login('[email protected]','yourpassword') 
mail.inbox() 
print mail.unread() 
Cuestiones relacionadas