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.Message
mó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_addrs
debe 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'] = addr
Y 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 subprocess
para llamar al sendmail
paquete de Unix para salvar mi cordura antes de resolver esto.
sendmail
necesita una lista.