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.Message
moduł 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_addrs
jednak 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'] = addr
i 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 subprocess
zadzwonić do sendmail
pakietu unix , aby uratować moje zdrowie psychiczne, zanim się zorientowałem.
sendmail
potrzebuje listy.