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()
Ответ 2
Вы можете попробовать MIMEText
msg = MIMEText('text')
msg['to'] =
msg['cc'] =
затем отправьте сообщение msg.as_string()
http://docs.python.org/library/email-examples.html
Ответ 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())