Después de mucho buscar, no pude descubrir cómo usar smtplib.sendmail para enviar a múltiples destinatarios. El problema era que cada vez que se enviaba el correo los encabezados de correo parecían contener varias direcciones, pero de hecho solo el primer destinatario recibiría el correo electrónico.
El problema parece ser que el email.Messagemódulo espera algo diferente a la smtplib.sendmail()función.
En resumen, para enviar a múltiples destinatarios, debe configurar el encabezado para que sea una cadena de direcciones de correo electrónico delimitadas por comas. Sin embargo, el sendmail()parámetro to_addrsdebe ser una lista de direcciones de correo electrónico.
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'] = addrY luego funcionó. Las asignaciones múltiples en realidad añaden un nuevo encabezado 'Para' para cada una. Esta es una interfaz muy extraña, ni siquiera puedo explicar cómo pensé en probarla. Incluso estaba considerando usar subprocesspara llamar al sendmailpaquete de Unix para salvar mi cordura antes de resolver esto.
sendmailnecesita una lista.