Получение писем с Python и poplib

Я хотел бы войти в свою учетную запись с Python и получить python для печати сообщений, полученных в моем почтовом ящике. Я знаю как подключиться

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

Я не знаю, как заставить Python отображать мои сообщения. Я пробовал все функции в poplib doc. Они показывают только номера.

3 ответов


вы не опубликовали свой исходный код, но вот мой ответ:

как получить общее количество сообщений:

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

как получить конкретное сообщение, зная его номер в почтовом ящике:

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

таким образом, функция вам может понадобиться retr, он возвращает кортеж. Видеть здесь.

осторожно он также устанавливает соответствующую электронную почту, как видно на сервере! Вы, вероятно, можете отменить это, по крайней мере, с IMAP вы можете.

и моя реализация электронной почты pop3 lib гласит:

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 

также вот соединение POP3, по крайней мере, как я его реализовал...вроде сложно использовать сравнение строк, но это сработало для моего приложения:

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 

использование примера POP3 документы:

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()

Если вы хотите использовать IMAP4. Используйте библиотеку outlook python, загрузите здесь : https://github.com/awangga/outlook

чтобы получить непрочитанное письмо из папки "Входящие":

import outlook
mail = outlook.Outlook()
mail.login('emailaccount@live.com','yourpassword')
mail.inbox()
print mail.unread()