Depois de muita pesquisa, não consegui descobrir como usar o smtplib.sendmail para enviar para vários destinatários. O problema era que, sempre que o email era enviado, os cabeçalhos pareciam conter vários endereços, mas na verdade apenas o primeiro destinatário recebia o email.
O problema parece ser que o email.Messagemódulo espera algo diferente da smtplib.sendmail()função.
Em resumo, para enviar para vários destinatários, você deve definir o cabeçalho como uma sequência de endereços de email delimitados por vírgula. O sendmail()parâmetro, to_addrsno entanto, deve ser uma lista de endereços de email.
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'] = addre então funcionou. Na verdade, várias atribuições acrescentam um novo cabeçalho 'Para' a cada uma. Essa é uma interface muito bizarra, eu nem consigo explicar como pensei em experimentar. Eu estava pensando em usar subprocesso sendmailpacote unix para salvar minha sanidade antes de descobrir isso.
sendmailprecisa de uma lista.