Sejak Python 3.2, dirilis November 2011, smtplib memiliki fungsi baru, send_message
bukan 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 sendmail
menambahkan 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_message
membutuhkan objek Message, yang berarti Anda harus mengimpor kelas dari email.message
alih-alih hanya meneruskan string ke dalamnya sendmail
.