Sejak Python 3.2, dirilis November 2011, smtplib memiliki fungsi baru, send_messagebukan hanya sendmail, yang membuat berurusan dengan To / CC / BCC lebih mudah. Menarik dari contoh email resmi Python , dengan sedikit modifikasi, kami mendapatkan:
# Import smtplib for the actual sending function
import smtplib
# Import the email modules we'll need
from email.message import EmailMessage
# Open the plain text file whose name is in textfile for reading.
with open(textfile) as fp:
# Create a text/plain message
msg = EmailMessage()
msg.set_content(fp.read())
# me == the sender's email address
# you == the recipient's email address
# them == the cc's email address
# they == the bcc's email address
msg['Subject'] = 'The contents of %s' % textfile
msg['From'] = me
msg['To'] = you
msg['Cc'] = them
msg['Bcc'] = they
# Send the message via our own SMTP server.
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
Menggunakan header berfungsi dengan baik, karena send_message menghormati BCC seperti yang diuraikan dalam dokumentasi :
send_message tidak mengirimkan header Bcc atau Resent-Bcc apa pun yang mungkin muncul di pesan
Dengan sendmailmenambahkan header CC ke pesan, melakukan sesuatu seperti:
msg['Bcc'] = blind.email@adrress.com
Atau
msg = "From: from.email@address.com" +
"To: to.email@adress.com" +
"BCC: hidden.email@address.com" +
"Subject: You've got mail!" +
"This is the message body"
Masalahnya adalah, fungsi sendmail memperlakukan semua header tersebut dengan sama, artinya mereka akan dikirim (terlihat) ke semua To: dan BCC: users, mengalahkan tujuan BCC. Solusinya, seperti yang ditunjukkan dalam banyak jawaban lain di sini, adalah tidak menyertakan BCC di tajuk, dan sebagai gantinya hanya dalam daftar email yang diteruskan sendmail.
Peringatannya adalah itu send_messagemembutuhkan objek Message, yang berarti Anda harus mengimpor kelas dari email.messagealih-alih hanya meneruskan string ke dalamnya sendmail.