Po wielu poszukiwaniach nie mogłem dowiedzieć się, jak używać smtplib.sendmail do wysyłania wiadomości do wielu odbiorców. Problem polegał na tym, że za każdym razem, gdy wiadomość była wysyłana, wydawało się, że nagłówki zawierają wiele adresów, ale tak naprawdę tylko pierwszy adresat otrzymał wiadomość.
Problem polega na tym, że email.Messagemoduł oczekuje czegoś innego niż smtplib.sendmail()funkcja.
Krótko mówiąc, aby wysłać do wielu odbiorców, należy ustawić nagłówek jako ciąg adresów e-mail rozdzielanych przecinkami. sendmail()Parametr to_addrsjednak powinna być lista adresów 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'] = addri wtedy zadziałało. Wiele przypisań faktycznie dodaje nowy nagłówek „Do” dla każdego. To bardzo dziwny interfejs, nie umiem nawet wyjaśnić, jak go wypróbowałem. Zastanawiałem się nawet, czy nie subprocesszadzwonić do sendmailpakietu unix , aby uratować moje zdrowie psychiczne, zanim się zorientowałem.
sendmailpotrzebuje listy.