Ab Python 3.2, veröffentlicht im November 2011, hat die smtplib eine neue Funktion send_message
anstelle von nur sendmail
, was den Umgang mit To / CC / BCC erleichtert. Aus den offiziellen Python-E-Mail-Beispielen mit einigen geringfügigen Änderungen erhalten wir:
# 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()
Die Verwendung der Header funktioniert einwandfrei , da send_message BCC wie in der Dokumentation beschrieben respektiert :
send_message überträgt keine Bcc- oder Resent-Bcc-Header, die möglicherweise in msg erscheinen
Dabei war sendmail
es üblich, die CC-Header zur Nachricht hinzuzufügen und dabei Folgendes zu tun:
msg['Bcc'] = blind.email@adrress.com
Oder
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"
Das Problem ist, dass die sendmail-Funktion alle diese Header gleich behandelt, was bedeutet, dass sie (sichtbar) an alle To: - und BCC: -Benutzer gesendet werden, wodurch die Zwecke von BCC zunichte gemacht werden. Die Lösung bestand, wie in vielen anderen Antworten hier gezeigt, darin, BCC nicht in die Kopfzeilen aufzunehmen, sondern nur in die Liste der E-Mails, an die weitergeleitet wurde sendmail
.
Die Einschränkung besteht darin, send_message
dass ein Message-Objekt erforderlich ist. Dies bedeutet, dass Sie eine Klasse importieren müssen, email.message
anstatt nur Zeichenfolgen zu übergeben sendmail
.