technique:python:mail_python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
technique:python:mail_python [2020/06/12 02:15] francoisatechnique:python:mail_python [2024/04/02 15:08] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-====== Envoi de mail avec Python ====== +**Cette page est obsolète. Veuillez accéder au contenu à son nouvel emplacement : [[https://bibliotech.cemea.org/books/outils-technique/page/mail-python|mail-python]]**
- +
-Pour envoyer des mails avec Python +
- +
-[[https://blog.mailtrap.io/sending-emails-in-python-tutorial-with-code-examples/|https://blog.mailtrap.io/sending-emails-in-python-tutorial-with-code-examples/]] +
-<code> +
- +
-import smtplib, ssl +
-from email.mime.multipart import MIMEMultipart +
-from email.mime.text import MIMEText +
- +
-</code> +
- +
-Il est possible de définir des templates jinga pour l'envoi de mail (ici avec les 2 render_template). +
- +
-On définir les variables de connexion : +
- +
-<code> +
-smtp_server = "mail.cemea.org" +
-smtp_port = 465  # For SSL +
-smtp_email = "machines@cemea.asso.fr" +
-smtp_password = "xxxxxx" +
- +
-</code> +
- +
-Attention à ne pas intégrer de caractères non HTML (codées sur 7 bits dans le corps du mail, sinon en 64 bits). +
- +
-Les templates jinga intègres des filters pour le faire : ''|escape'' (comme ''[[:technique:python:msg_ckgedit_quot_from_ckgedit_quot?media=technique:python:msg_ckgedit_quot_from_ckgedit_quot|escape ]]'' ). +
- +
-<code python> +
-   email = MIMEMultipart('alternative'+
-    email['To'] = "toi@adresse.fr" +
-    email['From'] = "moi@adresse.fr" +
-    copies= ["adrs1@adresse.fr","adrs2@adresse.fr"+
-    bcopies= ["adrs3@adresse.fr","adrs4@adresse.fr"+
-    # email['Cc'] = "moi@adresse.fr" # si unique +
-    email['Cc'] = ", ".join(copies) +
-    email['Bcc'] = ", ".join(bcopies) +
-    email['Reply-To'] = "noreply@adresse.fr" +
- +
-    email['Subject'] = f"Sujet du mail+
-    txtmessage = render_template('mail.txt', msg=msg) +
-    htmlmessage = render_template('mailhtml.txt', msg=msg) +
- +
-    email.attach(MIMEText(txtmessage, 'plain')) +
-    email.attach(MIMEText(htmlmessage, 'html')) +
- +
-    server = smtplib.SMTP_SSL(host=smtp_server,port=smtp_port) +
-    server.login(smtp_email, smtp_password) +
-    server.sendmail(email['From'], [email['To']]+copies+bcopies, email.as_string()) +
-    server.quit() +
- +
- +
-</code> +
- +
-Et c'est tout. +
- +
-<WRAP center round important 60%>\\ +
-Il est important de conserver les mêmes adresses (y compris les adresses en Bcc) dans la première et seconde valeur de la fonction sendmail ! +
- +
-LEs premières valeurs sont les vraies valeurs d'envoi, le dernier champ correspond à l'entête affiché.\\ +
-</WRAP>\\ +
- +
-====== Insertion de pièces jointes ====== +
- +
-Je coplie/colle ici : [[https://stackoverflow.com/questions/3362600/how-to-send-email-attachments|https://stackoverflow.com/questions/3362600/how-to-send-email-attachments]] +
- +
-Pas testé, juste documenté +
- +
-<code python+
-import smtplib +
-from os.path import basename +
-from email.mime.application import MIMEApplication +
-from email.mime.multipart import MIMEMultipart +
-from email.mime.text import MIMEText +
-from email.utils import COMMASPACE, formatdate +
- +
- +
-</code> +
- +
-Et la fonction d'envoi avec lesfichiers dans "files" +
- +
-<code python> +
-def send_mail(send_from, send_to, subject, text, files=None, server="127.0.0.1"): +
-    assert isinstance(send_to, list) +
- +
-    msg = MIMEMultipart() +
-    msg['From'= send_from +
-    msg['To'= COMMASPACE.join(send_to) +
-    msg['Date'] = formatdate(localtime=True) +
-    msg['Subject'] = subject +
- +
-    msg.attach(MIMEText(text)) +
- +
-    for f in files or []: +
-        with open(f, "rb") as fil: +
-            part = MIMEApplication( +
-                fil.read(), +
-                Name=basename(f) +
-            ) +
-        # After the file is closed +
-        part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f) +
-        msg.attach(part) +
- +
-    smtp = smtplib.SMTP(server) +
-    smtp.sendmail(send_from, send_to, msg.as_string()) +
-    smtp.close() +
- +
- +
-</code> +
- +
  • technique/python/mail_python.1591920933.txt.gz
  • Dernière modification : 2020/06/12 02:15
  • de francoisa