#!/usr/bin/env python # -*- coding: utf-8 -*- # assumes your file is called mbox # writes to a file called mbox.csv import mailbox import csv # handle recursive payloads # this only exports the human-readable text/plain payload def more_payloads(message): body = "" if message.is_multipart(): for payload in message.get_payload(): body += more_payloads(payload) else: if message.get_content_type() == 'text/plain': body = message.get_payload(decode=True) return body with open("mbox.csv", "wb") as outfile: writer = csv.writer(outfile) for message in mailbox.mbox('mbox'): ## 'mbox' needs to match the file you're reading from body = more_payloads(message) writer.writerow([ message['date'], message['from'], message['subject'], body])