Python SMTP-E-Mail-Versand
SMTP (Simple Mail Transfer Protocol) ist ein einfaches Mailübertragungsprotokoll. Es ist eine Reihe von Regeln für die Übertragung von E-Mails von einer Quelladresse zu einer Zieladresse, die die Art und Weise steuert, wie E-Mails 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 Domänennamen des Hosts angeben, z. B.: example.com. 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 Zeichenfolgen – die E-Mail-Adressen, an die gesendet werden soll.
- msg: Die zu sendende Nachricht.
Beachten Sie den dritten Parameter hier: msg ist eine Zeichenfolge, die die E-Mail darstellt. Wir wissen, dass eine E-Mail im Allgemeinen aus einem Betreff, Absender, Empfänger, E-Mail-Inhalt, Anhängen usw. besteht. Beim Senden einer E-Mail sollten Sie auf das Format von msg achten. Dieses Format ist das im SMTP-Protokoll definierte Format.
Beispiel
Das folgende Beispiel setzt voraus, dass Sie einen SMTP-unterstützenden Dienst auf Ihrem Rechner installiert haben, wie z. B. sendmail.
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-Felder:From, To, undSubject, wobei jede Information durch eine Leerzeile getrennt wird.
Wir instanziieren das SMTP-Objekt des smtplib-ModulssmtpObj, um eine Verbindung zum SMTP-Server herzustellen, und verwenden diesendmail-Methode, um die Nachricht zu senden.
Führen Sie das obige Programm aus. Wenn Siesendmail (Mail Transfer Agent)installiert haben, wird Folgendes ausgegeben:
$ python test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (normalerweise im Spam-Ordner), um die E-Mail zu sehen:

Wenn wir keinen sendmail-Zugriff auf unserem Rechner haben, können wir auch den SMTP-Zugriff anderer E-Mail-Dienstanbieter (QQ, NetEase, Google usw.) nutzen.
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-formatierte E-Mails mit Python senden
Der Unterschied zwischen dem Senden von HTML-formatierten E-Mails und Nur-Text-E-Mails in Python besteht darin, dass `_subtype` in MIMEText auf 'html' gesetzt wird. 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 installiert ist, wird Folgendes ausgegeben:
$ python test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (normalerweise im Spam-Ordner), um die E-Mail zu 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 den Anhang. Wenn mehrere Anhänge vorhanden sind, können Sie diese nacheinander erstellen und schließlich mit smtplib.smtp versenden.
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 ein Beispiel-Python-E-Mail-Versandtest...', '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"
$ python test.py
邮件发送成功
Überprüfen Sie Ihren Posteingang (normalerweise im Spam-Ordner), um die E-Mail zu sehen:

Bilder in HTML-Text einfügen
In HTML-E-Mail-Textkörpern ist das Hinzufügen externer Links bei E-Mail-Dienstanbietern im Allgemeinen unwirksam. Ein Beispiel für das korrekte Hinzufügen von Bildern ist wie folgt:
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>Bilddemonstration:</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"
$ python test.py
邮件发送成功
Prüfen Sie Ihren Posteingang (falls sie im Spam-Ordner liegt, müssen Sie sie möglicherweise in den Posteingang verschieben, um sie korrekt anzuzeigen), und Sie können die E-Mail sehen:

Senden mit einem SMTP-Dienst eines Drittanbieters
Hier verwenden wir den SMTP-Dienst von QQ Mail (Sie können auch 163, Gmail usw. verwenden). Die folgende Konfiguration ist erforderlich:

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 eingeben','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 Informationen finden Sie unter:https://docs.python.org/2/library/email-examples.html。
Andere Erweiterungen