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)