ในขณะที่ Python 3.2 เผยแพร่เมื่อพฤศจิกายน 2554 smtplib มีฟังก์ชันใหม่send_message
แทนที่จะเป็นเพียงแค่sendmail
ซึ่งทำให้การจัดการกับ To / CC / BCC ง่ายขึ้น จากตัวอย่างอีเมลทางการของ Pythonโดยมีการปรับเปลี่ยนเล็กน้อยเราจะได้รับ:
import smtplib
from email.message import EmailMessage
with open(textfile) as fp:
msg = EmailMessage()
msg.set_content(fp.read())
msg['Subject'] = 'The contents of %s' % textfile
msg['From'] = me
msg['To'] = you
msg['Cc'] = them
msg['Bcc'] = they
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
การใช้ส่วนหัวทำงานได้ดีเนื่องจากsend_message เคารพ BCC ตามที่ระบุไว้ในเอกสารประกอบ :
send_message ไม่ส่งส่วนหัว Bcc หรือ Resent-Bcc ที่อาจปรากฏใน msg
เนื่องจากsendmail
เป็นเรื่องปกติที่จะเพิ่มส่วนหัว CC ลงในข้อความโดยทำบางสิ่งเช่น:
msg['Bcc'] = blind.email@adrress.com
หรือ
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"
ปัญหาคือฟังก์ชัน sendmail จะปฏิบัติต่อส่วนหัวทั้งหมดเหมือนกันซึ่งหมายความว่าจะถูกส่ง (อย่างเห็นได้ชัด) ไปยัง To: และ BCC: users ซึ่งเอาชนะวัตถุประสงค์ของ BCC การแก้ปัญหาดังแสดงในหลายคำตอบอื่น ๆ ที่นี่ก็จะไม่รวมอยู่ในส่วนหัว BCC sendmail
และแทนที่จะเฉพาะในรายชื่ออีเมลที่ส่งผ่านไปยัง
ข้อแม้คือsend_message
ต้องใช้วัตถุข้อความซึ่งหมายความว่าคุณจะต้องนำเข้าคลาสจากemail.message
แทนที่จะส่งผ่านสตริงเข้าไปsendmail
เท่านั้น