2009-10-09 16 views
68

Potrzebuję do testowania, aby zapełnić kilkaset skrzynek pocztowych różnymi wiadomościami i zamierzałem użyć do tego smtplib. Ale między innymi muszę mieć możliwość wysyłania wiadomości nie tylko DO określonych skrzynek pocztowych, ale także CC i BCC. Nie wygląda na to, że smtplib obsługuje CC-ing i BCC-ing podczas wysyłania e-maili.python: jak wysyłać pocztę z TO, CC i BCC?

Szukasz sugestii, jak zrobić CC lub BCC, wysyłając wiadomości ze skryptu Pythona.

(A - Nie, ja nie tworząc skrypt na spam nikogo poza moim środowisku testowym.)

Odpowiedz

106

nagłówków wiadomości don” mają znaczenie dla serwera SMTP. Wystarczy, że dodasz odbiorców CC i BCC do użytkowników toaddrs, gdy wyślesz e-mail. W przypadku CC dodaj je do nagłówka 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() 
+0

smtplib.SMTP nie wysyła list do adresów. Przynajmniej nie na python 2.7.2 – LostMohican

+0

W tym przypadku nagłówek BCC wspomniany w RFC 2822 nie ma żadnego sensu. –

+1

@ABentSpoon brakuje dwukropka po "Temat". – user891260

15

Rozróżnienie do cc i BCC występuje tylko w nagłówkach tekstowych. Na poziomie SMTP wszyscy są odbiorcami.

TO - Jest TO: nagłówek z Ten adres odbiorcy

CC - Jest CC: nagłówek z Ten adres odbiorcy

BCC - To odbiorca nie wspomina się w ogóle w nagłówkach, ale nadal jest odbiorcą.

Jeśli masz

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

Masz trzy odbiorców. Nagłówki w organizmie e-mail będzie zawierał jedynie do: a CC:

10

Nie dodawaj nagłówka bcc.

Zobacz to: http://mail.python.org/pipermail/email-sig/2004-September/000151.html

A to: „” "Zauważ, że drugi argument do sendmail(), odbiorców, są przekazywane w postaci listy można dołączyć dowolną liczbę adresów na liście, aby mieć. wiadomość dostarczona do każdego z nich po kolei. Ponieważ informacje koperta jest oddzielone od nagłówków wiadomości, można nawet BCC kogoś poprzez włączenie ich w metodzie argumentu, ale nie w nagłówku wiadomości. „””z 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() 
+0

Kciuki za spryt: D – Chris

10

Kluczową sprawą jest dodanie odbiorców jako listy adresów e-mail w twoim połączeniu 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() 
+0

Pole bcc było również wymagane w tym pytaniu. –

+1

Możesz również dodać bcc w podobny sposób. Zaktualizowałem fragment kodu. – helios

+0

Pozostaw 'msg ['BCC']' off - ujawnia twojego ukrytego nadawcę i nie ma żadnego wpływu na to, czy wiadomość zostanie do niego wysłana, czy nie (argumenty do 'sendmail'a 'to robią). –

1

To nie pracował dla mnie, dopóki nie stworzył:

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

i niż dodanej cc w odbiorcy [LIST] jak:

s.sendmail(me, [you,cc], msg.as_string()) 
Powiązane problemy