script library leer enviar correo con python email testing

library - Python: ¿cómo enviar correo con TO, CC y BCC?



python send email cc bcc (6)

Necesito pruebas para llenar unos cientos de buzones de correo electrónico con varios mensajes, y usaré smtplib para eso. Pero, entre otras cosas, debo poder enviar mensajes no solo a buzones específicos, sino también a CC y BCC. No parece que smtplib admita CC-ing y BCC-ing mientras envía correos electrónicos.

Buscando sugerencias sobre cómo hacer CC o BCC enviando mensajes desde el script python.

(Y, no, no estoy creando una secuencia de comandos para enviar correo no deseado a nadie fuera de mi entorno de prueba).


La clave es agregar a los destinatarios como una lista de id. De correo electrónico en su llamada a sendmail.

import smtplib from email.mime.multipart import MIMEMultipart me = "[email protected]" to = "[email protected]" cc = "[email protected],[email protected]" bcc = "[email protected],[email protected]" rcpt = cc.split(",") + bcc.split(",") + [to] msg = MIMEMultipart(''alternative'') msg[''Subject''] = "my subject" msg[''To''] = to msg[''Cc''] = cc msg[''Bcc''] = bcc msg.attach(my_msg_body) server = smtplib.SMTP("localhost") # or your smtp server server.sendmail(me, rcpt, msg.as_string()) server.quit()


La distinción entre TO, CC y BCC ocurre solo en los encabezados de texto. En el nivel SMTP, todos son destinatarios.

TO - Hay un encabezado TO: con la dirección de este destinatario

CC - Hay un encabezado CC: con la dirección de este destinatario

BCC: este destinatario no se menciona en los encabezados, pero sigue siendo un destinatario.

Si usted tiene

TO: [email protected] CC: [email protected] BCC: [email protected]

Tienes tres destinatarios. Los encabezados en el cuerpo del correo electrónico incluirán solo el TO: y CC:


Los encabezados de correo electrónico no importan al servidor smtp. Simplemente agregue los destinatarios CC y BCC a los destinatarios cuando envíe su correo electrónico. Para CC, agréguelos al encabezado CC.

toaddr = ''[email protected]'' cc = [''[email protected]'',''[email protected]''] bcc = [''[email protected]''] fromaddr = ''[email protected]'' message_subject = "disturbance in sector 7" message_text = "Three are dead in an attack in the sewers below sector 7." message = "From: %s/r/n" % fromaddr + "To: %s/r/n" % toaddr + "CC: %s/r/n" % ",".join(cc) + "Subject: %s/r/n" % message_subject + "/r/n" + message_text toaddrs = [toaddr] + cc + bcc server = smtplib.SMTP(''smtp.sunnydale.k12.ca.us'') server.set_debuglevel(1) server.sendmail(fromaddr, toaddrs, message) server.quit()


No agregue el encabezado bcc.

Vea esto: http://mail.python.org/pipermail/email-sig/2004-September/000151.html

Y esto: "" "Tenga en cuenta que el segundo argumento para sendmail (), los destinatarios, se pasa como una lista. Puede incluir cualquier número de direcciones en la lista para que el mensaje se entregue a cada uno de ellos por turno. la información está separada de los encabezados de los mensajes, incluso puede BCC a alguien incluyéndolos en el argumento de método pero no en el encabezado del mensaje. "" "desde http://pymotw.com/2/smtplib

toaddr = ''[email protected]'' cc = [''[email protected]'',''[email protected]''] bcc = [''[email protected]''] fromaddr = ''[email protected]'' message_subject = "disturbance in sector 7" message_text = "Three are dead in an attack in the sewers below sector 7." message = "From: %s/r/n" % fromaddr + "To: %s/r/n" % toaddr + "CC: %s/r/n" % ",".join(cc) # don''t add this, otherwise "to and cc" receivers will know who are the bcc receivers # + "BCC: %s/r/n" % ",".join(bcc) + "Subject: %s/r/n" % message_subject + "/r/n" + message_text toaddrs = [toaddr] + cc + bcc server = smtplib.SMTP(''smtp.sunnydale.k12.ca.us'') server.set_debuglevel(1) server.sendmail(fromaddr, toaddrs, message) server.quit()


No funcionó para mí hasta que creé:

#created cc string cc = ""[email protected]; #added cc to header msg[''Cc''] = cc

y que agregó cc en el destinatario [list] como:

s.sendmail(me, [you,cc], msg.as_string())