Outils pour utilisateurs

Outils du site


dev:django:generer_un_fichier_eml_avec_django

Générer un fichier eml avec django

Il est possible de générer un fichier .eml en django: cela peut être utile si l’on souhaite créer des templates d’email à ouvrir un client mail afin de les envoyer manuellement.

On va utiliser la classe EmailMessage de from django.core.mail.

email_msg = EmailMessage(...)
email_msg.content_subtype = "html" # si on souhaite envoyer un email au format html

Pour ne pas avoir des problèmes de caractères (rencontré surtout avec Outlook), on doit modifier l’instance de Policy de l’e-mail. Par défaut j’ai remarqué que email.policy.Compat32 était utilisé (car une instance de email.mime.text.MIMEText est créée), on va le changer.

On récupère l’instance

msg = email_msg.message()
with open(filepath, "w") as f:
    gen = generator.Generator(f, policy=policy.SMTP)
    gen.flatten(msg)

Reste à renvoyer le fichier à l’utilisateur. Pour avoir un exemple concret, plaçons tout le code dans une requête de type fonction.

def gen_email(request):
    filename = "email.eml"
    email_msg = EmailMessage(
        subject="Le sujet...",
        body="Le corps de l'email...",
        from_email="from@example.com",
        to=["to@example.com"],
        headers={"X-Unsent": "1"},
    )
    email_msg.content_subtype = "html"
 
    _, path = mkstemp(filename)
 
    msg = email_msg.message()
 
    with open(path, "w") as f:
        gen = generator.Generator(f, policy=policy.SMTP)
        gen.flatten(msg)
 
    return FileResponse(open(path, "rb"), as_attachment=True, filename=filename)
dev/django/generer_un_fichier_eml_avec_django.txt · Dernière modification: 2021/09/04 22:34 de sekun