parsing downloaded mail via POP3
Gerard Flanagan
grflanagan at yahoo.co.uk
Wed Mar 22 17:05:12 EST 2006
Kevin F wrote:
> I have the following script:
>
> emails = []
> for msg in messagesInfo:
> msgNum = int(msg.split()[0])
> msgSize = int(msg.split()[1])
> if(msgSize < 20000):
> message = server.retr(msgNum)[1]
> Message = join(message, "\n")
> emails.append(message)
>
>
> It downloads messages for me via my POP3 server, however, the message
> format (attached below) includes ridiculous amounts of data and I just
> want to return the from, subject, and body. Any pointers on how to do this?
>
Have you tried server.top ?
MAX_SUMMARY_LINES = 20
def get_headers(self):
server = poplib.POP3(self.server_name)
server.user(self.user_name)
server.pass_(self.password)
hdrs = []
try:
msgCount, msgBytes = server.stat()
for i in range(msgCount):
msgNum = i+1
hdr, message, octets = server.top(msgNum,
MAX_SUMMARY_LINES)
hdrs.append(message)
finally:
server.quit()
alternatively, something like:
import poplib, email
from email.Utils import getaddresses, parseaddr
def download_mail(self):
server = poplib.POP3(self.server_name)
server.user(self.user_name)
server.pass_(self.password)
try:
msgCount, msgBytes = server.stat()
self.messages = []
for i in range(msgCount):
msgNum = i+1
hdr, message, octets = server.retr(msgNum)
mail_msg = '\n'.join( message)
self.messages.append(
email.message_from_string(mail_msg) )
finally:
server.quit()
def print_headers(self):
for message in self.messages:
print '#' * 80
print parseaddr( message['from'] )
print message['subject']
print message['date']
print getaddresses( message.get_all('to', []) )
print getaddresses( message.get_all('cc', []) )
Gerard
More information about the Python-list
mailing list