Howto use email module and write the get_payload to a file

C

chuck amadi

Hi I have managed to print the output of the get_payload to screen
but I need to write to a file as I only require the email body messages
from the mailbox.My script using the fp.readlines() function writes the
entire contents of the mailbox of cause including the headers of the
emails I do not want.

I have tried a few things but I cant get to my goal.Any ideas or
pointers I need only the email body and I cant figute out why I can
using the print statement but get those results to a file.
cheers

import sys
import os
import email
import mailbox
import StringIO


fp = file ("/var/spool/mail/chucka")


mbox = mailbox.UnixMailbox(fp, email.message_from_file)
# list of body messages.
bodies = []

# mail is the file object
for mail in mbox:
print 'mail'
print mail['Subject']
print mail.get_content_type()#text/plain
print mail.get_payload()


mailout = file("/home/chucka/pythonScript/SurveyResults1.txt","r")


fp = open("/var/spool/mail/chucka")
mb = mailbox.UnixMailbox(fp, email.message_from_file)

#for bdymsg in fp.xreadlines():
#for bdymsg in fp.readlines():
#for msgbodies in mb:
# mailout.write(bdymsg)
# bdymsg = mail.get_payload()
# mailout.write(mail.get_payload()

for bmsg in mb:
bmsg = get_payload()
mailout.write(bmsg)
# bmsg = [get_payload]
print "mailbox file copied...to SurveyResults.txt"

# Now close the files
mailout.close()
 
P

Piet van Oostrum

CA> Hi I have managed to print the output of the get_payload to screen
CA> but I need to write to a file as I only require the email body messages
CA> from the mailbox.My script using the fp.readlines() function writes the
CA> entire contents of the mailbox of cause including the headers of the
CA> emails I do not want.

CA> mailout = file("/home/chucka/pythonScript/SurveyResults1.txt","r")

If you open the file with "r" you can't write to it.

CA> fp = open("/var/spool/mail/chucka")
CA> mb = mailbox.UnixMailbox(fp, email.message_from_file)


CA> for bmsg in mb:
CA> bmsg = get_payload()

You use bmsg for two purposes: as the iteration variable, and to get the
payload. Moreover get_payload is a method and hence needs an object.

for bmsg in mb:
msgb = bmsg.get_payload()
mailout.write(msgb)

But that doesn't take into account that the payload will be a list when
the message is multipart. In that case you need some more elaborate code
like:


def writebody(mailout, msg):
payld = msg.get_payload()
if msg.is_multipart():
for m in payld:
writebody(mailout, m)
else:
mailout.write(payld)

for bmsg in mb:
writebody(mailout, bmsg)
print "mailbox file copied...to SurveyResults.txt"
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,981
Messages
2,570,188
Members
46,732
Latest member
ArronPalin

Latest Threads

Top