Python: как отправлять почту с TO, CC и BCC?

Мне нужно для тестирования, чтобы заполнить несколько сотен ящиков электронной почты различными сообщениями и собирался использовать smtplib для этого. Но, помимо прочего, мне нужно иметь возможность отправлять сообщения не только в специальные почтовые ящики, но также и CC и BCC. Это не похоже на smtplib поддерживает CC-ing и BCC-ing при отправке писем.

Ищите предложения, как делать сообщения CC или BCC с сообщения python script.

(И - нет, я не создаю script, чтобы спамить кого-либо вне моей тестовой среды.)

Ответ 1

Заголовки электронной почты не имеют значения для сервера smtp. Просто добавьте получателей CC и BCC в toaddrs при отправке электронной почты. Для CC добавьте их в заголовок 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()

Ответ 3

Различие между TO, CC и BCC происходит только в заголовках текста. На уровне SMTP все получатели.

TO - заголовок TO: с адресом получателя

CC - заголовок CC: с адресом получателя

BCC - этот получатель вообще не упоминается в заголовках, но все еще является получателем.

Если у вас

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

У вас три получателя. Заголовки в теле письма будут включать только TO: и CC:

Ответ 4

Не добавляйте заголовок bcc.

Смотрите это: http://mail.python.org/pipermail/email-sig/2004-September/000151.html

И это: "" Обратите внимание, что второй аргумент sendmail(), получатели, передается как список. Вы можете включить любое количество адресов в список, чтобы сообщение передавалось каждому из них по очереди. Поскольку информация о конверте отделена от заголовков сообщений, вы можете даже связать их с объектом в аргументе метода, но не в заголовке сообщения. "Из 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()

Ответ 5

Ключом является добавление получателей в список идентификаторов электронной почты в вашем вызове 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()

Ответ 6

Это не сработало для меня, пока я не создал:

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

а затем добавлен cc в получателе [list], например:

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