Après de nombreuses recherches, je n'ai pas trouvé 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 recevait l'e-mail.
Le problème semble être que le email.Message
attend quelque chose de différent du module smtplib.sendmail()
fonction.
En bref, pour envoyer à plusieurs destinataires, vous devez définir l'en-tête comme une chaîne d'adresses électroniques délimitées par des virgules. Le site sendmail()
paramètre to_addrs
devrait toutefois être une liste d'adresses électroniques.
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()
1 votes
Il semble que le PO ait répondu à sa propre question :
sendmail
a besoin d'une liste.0 votes
Duplicata possible de Existe-t-il un moyen d'ajouter plusieurs récepteurs dans Python SMTPlib ?
1 votes
En utilisant Python3, j'ai dû passer en boucle les destinataires ;
for addr in recipients: msg['To'] = addr
et puis ça a marché. Les affectations multiples ajoutent en fait un nouvel en-tête "À" pour chacune d'entre elles. C'est une interface très bizarre, je ne peux même pas expliquer comment j'ai pensé à l'essayer. J'ai même envisagé d'utilisersubprocess
pour appeler le système unixsendmail
paquet pour sauver ma santé mentale avant de comprendre ça.