software-mariodiana
3/28/2016 - 3:43 PM

Adapted from a Stack Overflow question. Generates a simple EML file.

Adapted from a Stack Overflow question. Generates a simple EML file.

# Adapted from:
#     Post: http://stackoverflow.com/q/23837498/155167
#     Accepted answer: http://stackoverflow.com/a/23837627/155167
# ----------------------------------------------------------------

from email import generator
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText


class EmlFile(object):

    subject = ''
    body = ''

    def __init__(self, sender):
        object.__init__(self)
        self._sender = sender
        self._recipients = list()

    @property
    def sender(self):
        return self._sender

    def addRecipient(self, address, name=None):
        if name:
            self._recipients.append('%s <%s>' % (name, address))
        else:
            self._recipients.append(address)

    def getRecipients(self):
        return ', '.join(self._recipients)
    
    def getMessage(self):
        message = MIMEMultipart('alternative')
        message['From'] = self.sender
        message['To'] = self.getRecipients()
        message['Subject'] = self.subject
        part = MIMEText(self.body, 'html')
        message.attach(part)
        return message

    def write(self, path):
        with open(path, 'w') as f:
            gen = generator.Generator(f)
            gen.flatten(self.getMessage())


if __name__ == '__main__':
    import os
    cwd = os.getcwd()
    path = os.path.join(cwd, 'message.eml')
    eml = EmlFile('alice@example.com')
    eml.addRecipient('bob@example.com')
    eml.subject = 'Test'
    eml.body = '<html><head></head><body><p>Hello, World!</p></body></html>'
    eml.write(path)