Python3 SMTP E-Mail-Versand
SMTP (Simple Mail Transfer Protocol) ist eine Reihe von Regeln für die Übertragung von E-Mails von einer Quelladresse zu einer Zieladresse und steuert die Art und Weise, wie Nachrichten weitergeleitet werden.
Pythons smtplib bietet eine bequeme Möglichkeit, E-Mails zu senden. Es ist ein einfacher Wrapper um das SMTP-Protokoll.
Die Syntax zum Erstellen eines SMTP-Objekts in Python lautet wie folgt:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Parameter description:
- host: SMTP-Server-Host. Sie können die IP-Adresse oder den Domainnamen des Hosts wie example.com angeben. Dies ist ein optionaler Parameter.
- port: Wenn Sie den Parameter host angeben, müssen Sie die Portnummer angeben, die vom SMTP-Dienst verwendet wird. Im Allgemeinen ist die SMTP-Portnummer 25.
- local_hostname: Wenn sich SMTP auf Ihrem lokalen Rechner befindet, müssen Sie nur die Serveradresse als localhost angeben.
Das Python-SMTP-Objekt verwendet die Methode sendmail, um E-Mails zu senden. Die Syntax lautet wie folgt:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
Parameter description:
- from_addr: E-Mail-Adresse des Absenders.
- to_addrs: Eine Liste von Strings, die Empfängeradressen.
- msg: Die zu sendende Nachricht.
Hier müssen Sie auf den dritten Parameter achten. msg ist eine Zeichenfolge, die die E-Mail darstellt. Wir wissen, dass eine E-Mail im Allgemeinen aus Betreff, Absender, Empfänger, E-Mail-Inhalt, Anhängen usw. besteht. Achten Sie beim Senden von E-Mails auf das Format von msg. Dieses Format ist im SMTP-Protokoll definiert.
Beispiel
Das folgende ist ein einfaches Beispiel für das Senden einer E-Mail mit Python:
Beispiel
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '[email protected]'
receivers = ['[email protected]']
message = MIMEText('Python E-Mail-Versandtest...', 'plain', 'utf-8')
message['From'] = Header("Beispiel", 'utf-8')
message['To'] = Header("Test", 'utf-8')
subject = 'Python SMTP-E-Mail-Test'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message.as_string())
print ("E-Mail erfolgreich gesendet")
except smtplib.SMTPException:
print ("Fehler: E-Mail konnte nicht gesendet werden")
Wir verwenden drei Anführungszeichen, um die E-Mail-Informationen festzulegen. Eine Standard-E-Mail erfordert drei Header-Informationen:From, To, undSubjectJede Information wird durch eine Leerzeile getrennt.
Wir instanziieren das SMTP-Objekt des smtplib-ModulssmtpObj, um eine Verbindung zum SMTP-Zugang herzustellen, und verwenden diesendmail-Methode, um die Nachricht zu senden.
Führen Sie das obige Programm aus. Wenn sendmail auf Ihrem Rechner installiert ist, wird es Folgendes ausgeben:
$ python3 test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (normalerweise im Spam-Ordner), und Sie können die E-Mail-Nachricht sehen:

Wenn wir keinen sendmail-Zugang auf unserem Rechner haben, können wir auch den SMTP-Zugang anderer Dienstanbieter (QQ, NetEase, Google usw.) verwenden.
Beispiel
import smtplib
from email.mime.text import MIMEText
from email.header import Header
mail_host="smtp.XXX.com"
mail_user="XXXX"
mail_pass="XXXXXX"
sender = '[email protected]'
receivers = ['[email protected]']
message = MIMEText('Python-E-Mail-Versandtest...', 'plain', 'utf-8')
message['From'] = Header("Beispiel", 'utf-8')
message['To'] = Header("Test", 'utf-8')
subject = 'Python SMTP-E-Mail-Test'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("E-Mail erfolgreich gesendet")
except smtplib.SMTPException:
print ("Fehler: E-Mail kann nicht gesendet werden")
HTML-E-Mails mit Python senden
Der Unterschied zwischen dem Senden einer HTML-E-Mail und einer E-Mail im Nur-Text-Format in Python besteht darin, den _subtype in MIMEText auf html zu setzen. Der konkrete Code lautet wie folgt:
Beispiel
import smtplib
from email.mime.text import MIMEText
from email.header import Header
sender = '[email protected]'
receivers = ['[email protected]']
mail_msg = """<p>Python E-Mail-Versandtest...</p>
<p><a href="http://www.example.com">Dies ist ein Link</a></p>"""
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("Beispiel", 'utf-8')
message['To'] = Header("Test", 'utf-8')
subject = 'Python SMTP-E-Mail-Test'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message.as_string())
print ("E-Mail erfolgreich gesendet")
except smtplib.SMTPException:
print ("Fehler: E-Mail kann nicht gesendet werden")
Führen Sie das obige Programm aus. Wenn sendmail auf Ihrem Rechner installiert ist, wird es Folgendes ausgeben:
$ python3 test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (normalerweise im Spam-Ordner), und Sie können die E-Mail-Nachricht sehen:

E-Mails mit Anhängen in Python senden
Um eine E-Mail mit Anhängen zu senden, erstellen Sie zuerst eine MIMEMultipart()-Instanz und erstellen Sie dann die Anhänge. Wenn es mehrere Anhänge gibt, erstellen Sie sie nacheinander und verwenden Sie schließlich smtplib.smtp zum Senden.
Beispiel
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
sender = '[email protected]'
receivers = ['[email protected]']
message = MIMEMultipart()
message['From'] = Header("Beispiel", 'utf-8')
message['To'] = Header("Test", 'utf-8')
subject = 'Python-SMTP-E-Mail-Test'
message['Subject'] = Header(subject, 'utf-8')
message.attach(MIMEText('Dies ist der Beispieltest zum Versenden von E-Mails mit Python...', 'plain', 'utf-8'))
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)
att2 = MIMEText(open('example.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="example.txt"'
message.attach(att2)
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message.as_string())
print ("E-Mail erfolgreich gesendet")
except smtplib.SMTPException:
print ("Fehler: E-Mail konnte nicht gesendet werden")
$ python3 test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (normalerweise im Spam-Ordner), und Sie können die E-Mail-Nachricht sehen:

Bilder zu HTML-Text hinzufügen
Im HTML-Text einer E-Mail ist das Hinzufügen externer Links bei E-Mail-Dienstanbietern im Allgemeinen ungültig. Ein korrektes Beispiel zum Hinzufügen von Bildern wird unten gezeigt:
Beispiel
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
sender = '[email protected]'
receivers = ['[email protected]']
msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("Beispiel", 'utf-8')
msgRoot['To'] = Header("Test", 'utf-8')
subject = 'Python-SMTP-E-Mail-Test'
msgRoot['Subject'] = Header(subject, 'utf-8')
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
mail_msg = """<p>Python-E-Mail-Versandtest...</p>
<p><a href="http://www.example.com">Beispiel-Tutorial-Link</a></p>
<p>Bilddemo:</p>
<p><img src="cid:image1"></p>"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, msgRoot.as_string())
print ("E-Mail erfolgreich gesendet")
except smtplib.SMTPException:
print ("Fehler: E-Mail konnte nicht gesendet werden")
$ python3 test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (wenn sie im Spam-Ordner liegt, müssen Sie sie möglicherweise in den Posteingang verschieben, damit sie richtig angezeigt wird), und Sie können die E-Mail-Nachricht sehen:

Senden über einen SMTP-Drittanbieterdienst
Hier verwenden wir den SMTP-Dienst von QQ Mail (Sie können auch 163, Gmail usw. verwenden). Sie müssen Folgendes konfigurieren:

QQ Mail legt das Passwort durch Generieren eines Autorisierungscodes fest:

QQ Mail SMTP-Serveradresse: smtp.qq.com, SSL-Port: 465.
Im folgenden Beispiel müssen Sie ändern: Absender-E-Mail (Ihre QQ-E-Mail), Passwort, Empfänger-E-Mail (Sie können an sich selbst senden).
QQ SMTP
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='[email protected]'
my_pass = 'xxxxxxxxxx'
my_user='[email protected]'
def mail():
ret=True
try:
msg=MIMEText('E-Mail-Inhalt ausfüllen','plain','utf-8')
msg['From']=formataddr(["FromExample",my_sender])
msg['To']=formataddr(["FK",my_user])
msg['Subject']="Beispiel-E-Mail-Versandtest"
server=smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(my_sender, my_pass)
server.sendmail(my_sender,[my_user,],msg.as_string())
server.quit()
except Exception:
ret=False
return ret
ret=mail()
if ret:
print("E-Mail erfolgreich gesendet")
else:
print("E-Mail-Versand fehlgeschlagen")
$ python test.py
邮件发送成功
Nach erfolgreichem Senden melden Sie sich im Postfach des Empfängers an, um es anzusehen:

Weitere Inhalte finden Sie unter:https://docs.python.org/3/library/email-examples.html。
Weitere Erweiterungen