Kasım 2011'de yayınlanan Python 3.2'den itibaren, smtplib'in send_message
sadece yerine yeni bir işlevi var sendmail
, bu da To / CC / BCC ile uğraşmayı kolaylaştırıyor. Dan Çekme Python resmi e-posta örneklerle bazı küçük değişiklikler içeren, elde ederiz:
# 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()
Send_message belgelerde ana hatlarıyla belirtildiği gibi BCC'ye saygı duyduğundan , başlıkları kullanmak iyi çalışıyor :
send_message, msg'de görünebilecek herhangi bir Bcc veya Resent-Bcc üstbilgisini iletmez
Bununla sendmail
birlikte, mesaja CC başlıklarını eklemek yaygındı ve aşağıdaki gibi bir şey yapıyordu:
msg['Bcc'] = blind.email@adrress.com
Veya
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"
Sorun şu ki, sendmail işlevi tüm bu başlıkları aynı şekilde ele alıyor, yani tüm Kime: ve BCC: kullanıcılarına BCC'nin amaçlarını geçersiz kılarak (görünür şekilde) gönderilecekler. Buradaki diğer yanıtların birçoğunda gösterildiği gibi çözüm, BCC'yi başlıklara dahil etmemek yerine, yalnızca iletilen e-postaların listesine dahil etmekti sendmail
.
Uyarı, send_message
bir Mesaj nesnesi gerektirmesidir, yani email.message
dizeleri yalnızca içine aktarmak yerine bir sınıfı içe aktarmanız gerekir sendmail
.