#!/usr/bin/env python3

import email.mime.multipart  # https://docs.python.org/3/library/email.mime.html
import email.header
import smtplib

sender = "stephane@example.com"
server = "smtp.example.com"
me = "S. Bortzmeyer <%s>" % sender
PREFACE = """
This is a message in multiple languages.  It says the
same thing in each language.  If you can read it in one language,
you can ignore the other translations. The other translations may be
presented as attachments or grouped together.

Ce message est disponible en plusieurs langues, disant la même chose
dans toutes les langues. Si vous le lisez dans une des langues, vous
pouvez donc ignorer les autres. Dans votre logiciel de messagerie, ces
autres traductions peuvent se présenter comme des pièces jointes, ou
bien collées ensemble.
"""

def send(addresses, subject, raw_msgs):
    msg = email.mime.multipart.MIMEMultipart(_subtype='multilingual')
    preface_msg = email.message.Message()
    preface_msg['Content-Transfer-Encoding'] = '8bit'
    preface_msg.set_charset("UTF-8")
    preface_msg.set_payload(PREFACE.encode('UTF-8'))
    msg.attach(preface_msg)
    for lang in raw_msgs.keys():
        lang_msg = email.message.Message()
        lang_msg['Content-Transfer-Encoding'] = '8bit'
        raw_msg = raw_msgs[lang]
        lang_msg.set_charset("UTF-8")
        lang_msg['Content-Language'] = lang
        lang_msg.set_payload(raw_msg.encode('UTF-8'))
        msg.attach(lang_msg)
    msg["Subject"] = str(email.header.Header(subject, charset="UTF-8"))
    msg["From"] = me
    msg["To"] = ", ".join(addresses)
    ci = smtplib.SMTP(server)
    ci.set_debuglevel(1)
    ci.sendmail(sender, addresses, msg.as_string())
    ci.quit()                                                 

send(["bortzmeyer@example.net"], "Test Python",
     {'en': "Very stupid test", 'fr': "Test extrêmement idiot"})
