Howto use email module and write the get_payload to a file

Piet van Oostrum piet at
Wed Jun 23 03:05:51 CEST 2004

>>>>> chuck amadi <chuck.amadi at> (CA) wrote:

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

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

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

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

Piet van Oostrum <piet at>
Private email: P.van.Oostrum at

More information about the Python-list mailing list