In dieser Lektion teile ich das Skript, das ich verwende, um E-Mails an die Benutzer der von mir erstellten Apps zu senden, und mehr.
Was wir tun werden?
Wir erstellen ein einfaches Python-Programm, das Folgendes tut:
- Verwenden Sie die von uns erstellte Vorlagendatei für das E-Mail-Design. Dies ist nur eine textbasierte Datei mit Platzhalterwerten.
- Rufen Sie den Namen und die E-Mail-Adresse der Person aus einer anderen von uns erstellten Textdatei ab.
Diese Punkte bringen dieses Programm viel näher an die reale Verwendung des Sendens von E-Mails in Ihren Apps. Lass uns anfangen.
Datei für E-Mails
Die Datei, die die E-Mails für die Benutzer enthält, sieht so aus:
Shubham [email protected]Dies ist nur eine einfache Textdatei, die den Namen und die E-Mail-Adresse des Benutzers durch Leerzeichen getrennt enthält. Es wurden mehrere E-Mails mit den Daten jedes Benutzers in einer neuen Zeile eingefügt. Wir haben diese Datei benannt Benutzer.TXT.
Verwenden der Vorlage
Lassen Sie uns auch schnell die Vorlage definieren, die wir in unserem Skript zum Ersetzen von Werten verwenden werden:
Hallo $PERSON_NAME,Wir haben diese E-Mail mit dem Python-smtplib-Modul gesendet. Cool, richtig?
Habt einen strahlenden Tag vor uns!
Prost
Wir haben eine Vorlagenzeichenfolge verwendet $PERSON_NAME die durch den Namen der Person ersetzt wird, die wir von den Benutzern erhalten.txt-Datei beim Senden der E-Mail.
Abrufen von Benutzerdaten aus einer Datei
Der erste Schritt zum Senden einer E-Mail an einen Benutzer besteht darin, festzustellen, wohin wir die E-Mails senden möchten. Schreiben wir eine Python-Funktion, die einen Dateinamen akzeptiert und uns Benutzernamen und E-Mail-IDs zurückgibt, an die die E-Mails gesendet werden müssen:
def get_users_data(Dateiname):Benutzername = []
user_email = []
mit open(file_name, mode='r', encoding='utf-8') als user_file:
für user_info in user_file:
Nutzername.anhängen(user_info.split()[0])
Benutzer Email.anhängen(user_info.split()[1])
Benutzername, Benutzere-Mail zurückgeben
Mit dieser Funktion geben wir nur die Namen und E-Mails der Benutzer zurück, die wir aus der Datei erhalten.
Abrufen des Vorlagenobjekts
Jetzt können wir unsere Vorlage analysieren und ein Vorlagenobjekt aus der von uns erstellten Textdatei abrufen:
def read_template(file_name):mit open(file_name, 'r', encoding='utf-8') als msg_template:
msg_template_content = msg_template.lesen()
Vorlage zurückgeben(msg_template_content)
Damit erhalten wir ein Template-Objekt zurück, mit dem wir den Inhalt der Datei analysieren und die erforderlichen Ersetzungen für die Template-Strings wie einen Benutzernamen vornehmen können.
So erfolgt der E-Mail-Versand?
Nachdem wir nun mit dem Vorlagendesign und den Benutzerdaten fertig sind, müssen wir verstehen, wie eine E-Mail tatsächlich an den Benutzer gesendet wird:
- SMTP-Verbindung mit Zugangsdaten für das Konto des Absenders erstellen
- Erstellen Sie eine mehrteilige Kopfzeile mit Informationen mit den Feldern Von, An und Betreff
- Erstellen Sie den Nachrichtentext, der gesendet werden muss
- Senden Sie die E-Mail mit dem SMTP-Verbindungsobjekt
SMTP-Verbindung einrichten
Lassen Sie uns abschließend die Funktion definieren, die die E-Mail an die angegebenen Benutzer sendet. Hier ist die Funktion:
def main():user_name, user_email = get_users_data('users.txt') # Benutzerdetails lesen
message_template = read_template('message.TXT')
# SMTP-Server einrichten
smtplib_server = smtplib.SMTP(host='smtp.Google Mail.com', port=587)
smtplib_server.starttls()
smtplib_server.anmelden(SEND_FROM, EMAIL_PWD)
# Rufen Sie alle Benutzerdetails ab und senden Sie die E-Mail:
für Name, E-Mail in ZIP (Benutzername, Benutzer-E-Mail):
multipart_message = MIMEMultipart() # eine Nachricht erstellen
# den tatsächlichen Personennamen zur Nachrichtenvorlage hinzufügen
msg = message_template.Ersatz(PERSON_NAME=name.Titel())
# Druckt den Nachrichtentext für uns aus
drucken (Nachricht)
# die Parameter der Nachricht einrichten
multipart_message['From']=SEND_FROM
multipart_message['To']=E-Mail
multipart_message['Subject']="LinuxHint-E-Mail"
# im Nachrichtentext hinzufügen
mehrteilige_nachricht.attach(MIMEText(msg, 'plain'))
# Nachricht über den zuvor eingerichteten Server senden send.
smtplib_server.send_message(mehrteilige_message)
del multipart_message
# Beenden Sie die SMTP-Sitzung und schließen Sie die Verbindung
smtplib_server.Verlassen()
In der obigen Funktion haben wir jeden Schritt befolgt, den wir im vorherigen Abschnitt angegeben haben. Wir haben die SMTP-Verbindung aufgebaut und zum Versenden der E-Mail verwendet.
Komplettes Programm
Lassen Sie uns im letzten Abschnitt einen Blick auf das vollständige Programm werfen, mit dem die E-Mail an den angegebenen Benutzer gesendet werden kann:
smtplib importierenaus String-Import-Vorlage
aus der Email.Mime.mehrteiliger Import MIMEMultipart
aus der Email.Mime.Textimport MIMEText
SEND_FROM = 'meine-E-Mail-hier'
EMAIL_PWD = 'mein-Passwort-hier'
def get_users_data(Dateiname):
Benutzername = []
user_email = []
mit open(file_name, mode='r', encoding='utf-8') als user_file:
für user_info in user_file:
Nutzername.anhängen(user_info.split()[0])
Benutzer Email.anhängen(user_info.split()[1])
Benutzername, Benutzere-Mail zurückgeben
def read_template(file_name):
mit open(file_name, 'r', encoding='utf-8') als msg_template:
msg_template_content = msg_template.lesen()
Vorlage zurückgeben(msg_template_content)
def main():
user_name, user_email = get_users_data('users.txt') # Benutzerdetails lesen
message_template = read_template('message.TXT')
# SMTP-Server einrichten
smtplib_server = smtplib.SMTP(host='smtp.Google Mail.com', port=587)
smtplib_server.starttls()
smtplib_server.anmelden(SEND_FROM, EMAIL_PWD)
# Rufen Sie alle Benutzerdetails ab und senden Sie die E-Mail:
für Name, E-Mail in ZIP (Benutzername, Benutzer-E-Mail):
multipart_message = MIMEMultipart() # eine Nachricht erstellen
# den tatsächlichen Personennamen zur Nachrichtenvorlage hinzufügen
msg = message_template.Ersatz(PERSON_NAME=name.Titel())
# Druckt den Nachrichtentext für uns aus
drucken (Nachricht)
# die Parameter der Nachricht einrichten
multipart_message['From']=SEND_FROM
multipart_message['To']=E-Mail
multipart_message['Subject']="LinuxHint-E-Mail"
# im Nachrichtentext hinzufügen
mehrteilige_nachricht.attach(MIMEText(msg, 'plain'))
# Nachricht über den zuvor eingerichteten Server senden.
smtplib_server.send_message(mehrteilige_message)
del multipart_message
# Beenden Sie die SMTP-Sitzung und schließen Sie die Verbindung
smtplib_server.Verlassen()
if __name__ == '__main__':
Main()
Wenn wir dieses Programm mit einer Gmail-ID ausführen, kann ein Problem wie dieses auftreten:
Gmail-SMTP-Fehler
Dies liegt daran, dass Gmail die Verwendung der Gmail-API durch einfache Skripte nicht zulässt. Dazu müssen Sie möglicherweise die Sicherheitsanmeldung in Ihrem Gmail-Konto deaktivieren. Lesen Sie hier, wie Sie dies für Gmail tun.
Fazit
In dieser Lektion haben wir uns angeschaut, wie wir E-Mails mit Pythons versenden können smtplib Modul.