Après de nombreuses recherches, je n'ai pas pu trouver comment utiliser smtplib.sendmail pour envoyer à plusieurs destinataires. Le problème était qu'à chaque fois que le courrier était envoyé, les en-têtes du courrier semblaient contenir plusieurs adresses, mais en fait, seul le premier destinataire recevrait le courrier électronique.
Le problème semble être que le email.Message
module attend quelque chose de différent de la smtplib.sendmail()
fonction.
En bref, pour envoyer à plusieurs destinataires, vous devez définir l'en-tête comme une chaîne d'adresses électroniques séparées par des virgules. Le sendmail()
paramètre to_addrs
doit cependant être une liste d'adresses e-mail.
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import smtplib
msg = MIMEMultipart()
msg["Subject"] = "Example"
msg["From"] = "me@example.com"
msg["To"] = "malcom@example.com,reynolds@example.com,firefly@example.com"
msg["Cc"] = "serenity@example.com,inara@example.com"
body = MIMEText("example email body")
msg.attach(body)
smtp = smtplib.SMTP("mailhost.example.com", 25)
smtp.sendmail(msg["From"], msg["To"].split(",") + msg["Cc"].split(","), msg.as_string())
smtp.quit()
for addr in recipients: msg['To'] = addr
et puis ça a marché. Plusieurs affectations ajoutent en fait un nouvel en-tête «À» pour chacune. C'est une interface très bizarre, je ne peux même pas expliquer comment j'ai pensé l'essayer. J'envisageais même d'utiliser subprocess
le sendmail
paquet Unix pour sauver ma raison avant de comprendre cela.
sendmail
besoin d'une liste.