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


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

поиск предложений, как сделать CC или BCC отправки сообщений из скрипта python.

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

6 78

6 ответов:

заголовки электронной почты не имеют значения для SMTP-сервера. Просто добавить получателей скрытой копии к toaddrs, когда вы отправить электронную почту. Для КС, добавлять их в заголовке чч.

toaddr = 'buffy@sunnydale.k12.ca.us'
cc = ['alexander@sunydale.k12.ca.us','willow@sunnydale.k12.ca.us']
bcc = ['chairman@slayerscouncil.uk']
fromaddr = 'giles@sunnydale.k12.ca.us'
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()

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

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

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

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

Если у вас

TO: abc@company.com
CC: xyz@company.com
BCC: boss@company.com

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

вы можете попробовать MIMEText

msg = MIMEText('text')
msg['to'] = 
msg['cc'] = 

затем отправить msg. as_string ()

http://docs.python.org/library/email-examples.html

главное, чтобы добавить получателей как список идентификаторов электронной почты в вашем вызове sendmail.

import smtplib
from email.mime.multipart import MIMEMultipart

me = "user63503@gmail.com"
to = "someone@gmail.com"
cc = "anotherperson@gmail.com,someone@yahoo.com"
bcc = "bccperson1@gmail.com,bccperson2@yahoo.com"

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()

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

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

и это: """Обратите внимание, что второй аргумент sendmail (), получатели, передается в виде списка. Вы можете включить любое количество адресов в список, чтобы сообщение доставлялось каждому из них по очереди. Поскольку информация о конверте отделена от заголовков сообщений, вы можете даже BCC кого-то, включив их в метод аргумент, но не в заголовке сообщения."""от http://pymotw.com/2/smtplib

toaddr = 'buffy@sunnydale.k12.ca.us'
cc = ['alexander@sunydale.k12.ca.us','willow@sunnydale.k12.ca.us']
bcc = ['chairman@slayerscouncil.uk']
fromaddr = 'giles@sunnydale.k12.ca.us'
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()

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

#created cc string
cc = ""someone@domain.com;
#added cc to header
msg['Cc'] = cc

и чем добавил cc в recipient [list] как:

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