I would like to log into my account with Python and get python to print the messages I received in my mailbox. I know how to connect
import getpass, poplib
user = 'my_user_name'
Mailbox = poplib.POP3_SSL('pop.googlemail.com', '995')
Mailbox.user(user)
Mailbox.pass_('my_password')
I don't know how to get Python to display my messages. I tried all the functions in the poplib doc. They only display numbers.
Source code: Lib/poplib.py. This module defines a class, POP3 , which encapsulates a connection to a POP3 server and implements the protocol as defined in RFC 1939. The POP3 class supports both the minimal and optional command sets from RFC 1939.
POP3 (Incoming) Post Office Protocol version 3 (POP3) is an mail protocol used to retrieve mail from a remote server to a local email client. POP3 copies the mail from the remote server into the local mail client. Optionally, mail is deleted after it is downloaded from the server. This saves space on the server.
Using the POP3 example 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()
You have not posted your source code, but here is my response:
How to get the total number of messages:
(numMsgs, totalSize) = self.conn_pop3.stat()
How to get a specific message, knowing its number in the mailbox:
(server_msg, body, octets) = self.conn_pop3.retr(number)
So the function you might need is retr, it returns a tuple. See here.
Careful it also sets the respective email as SEEN on the server! You can probably undo that, at least with IMAP you can.
And my implementation of a pop3 lib email read:
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
Also here is the POP3 connection, at least how I implemented it...sort of tricky using a string comparison, but it worked for my app:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With