Nach langem Suchen konnte ich nicht herausfinden, wie man mit smtplib.sendmail an mehrere Empfänger sendet. Das Problem war, dass jedes Mal, wenn die E-Mail gesendet wurde, die E-Mail-Header mehrere Adressen enthielten, aber tatsächlich nur der erste Empfänger die E-Mail erhielt.
Das Problem scheint zu sein, dass das email.Message
Modul etwas anderes als die smtplib.sendmail()
Funktion erwartet .
Kurz gesagt, um an mehrere Empfänger zu senden, sollten Sie den Header als eine Zeichenfolge von durch Kommas getrennten E-Mail-Adressen festlegen. Der sendmail()
Parameter to_addrs
sollte jedoch eine Liste von E-Mail-Adressen sein.
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
und dann hat es funktioniert. Bei mehreren Zuweisungen wird tatsächlich für jede ein neuer 'An'-Header angehängt. Dies ist eine sehr bizarre Oberfläche, ich kann nicht einmal erklären, wie ich dachte, es zu versuchen. Ich habe sogar darüber nachgedacht subprocess
, das Unix- sendmail
Paket aufzurufen , um meine geistige Gesundheit zu retten, bevor ich das herausgefunden habe.
sendmail
braucht eine Liste.