Enviar correo electrónico a múltiples destinatarios desde un archivo .txt con Python smtplib

Intento enviar correos desde Python a varias direcciones de correo electrónico, importadas desde un archivo .txt, he intentado diferentes syntax, pero nada funcionaría …

El código:

s.sendmail('sender@mail.com', ['recipient@mail.com', 'recipient2@mail.com', 'recipient3@mail.com'], msg.as_string()) 

Así que intenté esto para importar las direcciones de los destinatarios desde un archivo .txt:

 urlFile = open("mailList.txt", "r+") mailList = urlFile.read() s.sendmail('sender@mail.com', mailList, msg.as_string()) 

El mainList.txt contiene:

 ['recipient@mail.com', 'recipient2@mail.com', 'recipient3@mail.com'] 

Pero no funciona …

También he tratado de hacer:

 ... [mailList] ... in the code, and '...','...','...' in the .txt file, but also no effect 

y

 ... [mailList] ... in the code, and ...','...','... in the .txt file, but also no effect... 

¿Alguien sabe qué hacer?

¡Muchas gracias!

 urlFile = open("mailList.txt", "r+") mailList = [i.strip() for i in urlFile.readlines()] 

y ponga a cada destinatario en su propia línea (es decir, separado con un salto de línea).

Esta pregunta ha sido respondida, pero no completamente. El problema para mí es que el encabezado “Para:” quiere los correos electrónicos como una cadena, y la función sendmail lo quiere en una estructura de lista.

 # list of emails emails = ["banjer@example.com", "slingblade@example.com", "dude@example.com"] # Use a string for the To: header msg['To'] = ', '.join( emails ) # Use a list for sendmail function s.sendmail(from_email, emails, msg.as_string() ) 

La función sendmail requiere una lista de direcciones, le estás pasando una cadena.

Si las direcciones dentro del archivo están formateadas como usted dice, podría usar eval() para convertirlo en una lista.

Tiene que ser una lista real. Entonces, con esto en el archivo:

 recipient@mail.com,recipient2@mail.com,recipient3@mail.com 

tu puedes hacer

 mailList = urlFile.read().split(',') 

to_addrs en la llamada de la función sendmail es en realidad un diccionario de todos los destinatarios (to, cc, bcc) y no solo to.

Al proporcionar todos los destinatarios en la llamada funcional, también debe enviar una lista de los mismos destinatarios en el msg como un formato de cadena separado por comas para cada tipo de destinatario. (a, cc, bcc). Pero puede hacer esto fácilmente pero manteniendo listas separadas y combinando en cadenas o convirtiendo cadenas en listas.

Aquí están los ejemplos.

 TO = "1@to.com,2@to.com" CC = "1@cc.com,2@cc.com" msg['To'] = TO msg['CC'] = CC s.sendmail(from_email, TO.split(',') + CC.split(','), msg.as_string()) 

o

 TO = ['1@to.com','2@to.com'] CC = ['1@cc.com','2@cc.com'] msg['To'] = ",".join(To) msg['CC'] = ",".join(CC) s.sendmail(from_email, TO+CC, msg.as_string())