Python #19 – absenden von E-Mails

In diesem Beitrag zeige ich dir wie du E-Mails mit Python3 absenden kannst und somit automatisiert Nachrichten versenden kannst.

Programmierung

Besonderheiten bei Google Mail

Wenn du zum Absenden einen kostenfreien Google Mail Account verwenden möchtest, dann musst du dir zusätzlich ein App-Passwort einrichten. Und wie du dir dieses Passwort einrichtest, erfährst du in diesem Abschnitt, solltest du dieses bereits haben, so kannst du diesen Abschnitt überspringen.

Schritt 1 – anmelden an den Google Account

Im ersten Schritt musst du dich an deinen Google Account anmelden.

Schritt 2 – App Passwort erstellen

Wenn du nun angemeldet bist, solltest du auf der linken Seite den Menüpunkt „Sicherheit“ finden, welchen du nun anklickst. Es sollte sich dann in der Mitte der Seite der Eintrag.“

Das dargestellte, generierte App-Passwort ist nicht mehr gültig!

Absenden einer E-Mail

Um eine E-Mail absenden zu können, benötigen wir die Module smtplib und ssl. Die meisten Mailanbieter haben auf SSL umgestellt, somit ist man gezwungen (und das ist auch gut so) ssl zu verwenden.

import smtplib, ssl

#die Absender E-Mail Adresse, diese wird 
#meist als Benutzernamen bei der Authentifizierung genutzt
absender = 'meine_email_adresse_123@gmail.com'

#E-Mail Adresse des Empfängers
empfaenger = ['empfaenger_email_adresse@mail.de']

#SSL Port des Mailproviders
port = 465

#das Passwort, bei zbsp. Gmail muss hier das generierte App-Passwort eingetragen werden
passwort = ''

#Die Nachricht, Subject leitet die Betreffzeile ein,
#gefolgt von zwei Leerzeilen
message = "Subject: Hello from Python\n\nHier steht ein Text."
try:
    #SSL Verbindung aufbauen
    context = ssl.create_default_context()
    #der Postausgangsserver, in diesem Fall von Gmail
    server = smtplib.SMTP('smtp.gmail.com')
    server.ehlo()
    #Verbindung mit Start/TLS
    server.starttls()
    server.ehlo()
    #Anmelden mit der E-Mail Adresse & dem Passwort
    server.login(absender, passwort)
    #Absenden der E-Mail
    server.sendmail(absender, empfaenger, message)         
    #Wenn bis hier kein Fehler aufgetreten ist dann wurde die E-Mail erfolgreich gesendet.
    print ('E-Mail erfolgreich gesendet')
except Exception as e:
    #Wenn ein Fehler aufgetreten ist, dann soll dieser auf der Konsole ausgegeben werden.
    print ('Fehler beim absenden der E-Mail')
    print (e)
finally:
    #zum Schluß (auch im Fehlerfall) die Verbindung zum Server trennen
    server.quit()

Beispielprojekt – Webseite überwachen

In diesem „kleinen“ Beispiel möchte ich dir nun zeigen wie du verschiedene URLs überwachen kannst und wenn einmal eine nicht erreichbar ist eine entsprechende E-Mail absenden kannst. Dieses Tool kannst du als Monitoring von Webseiten / Webanwendungen nutzen.

import requests
import _io
import smtplib, ssl
from smtplib import SMTPException

urls = []

with open('adressen.txt', 'r') as file:
    for zeile in file:
        if(len(zeile.strip())>0):
            urls.append(zeile.strip())

logfileEntries = 0
errorMessage = ''
with open('monitor.log', 'w') as logFile:
    for url in urls:
        r = requests.get(url)
        statusCode = r.status_code
        if statusCode != 200:
            msg = url + ' StatusCode: '+ str(statusCode)+'\n'
            logfileEntries = logfileEntries + 1
            logFile.write(msg)
            errorMessage += msg                        
            
if logfileEntries > 0:
    absender = 'meine_email_adresse_123@gmail.com'
    empfaenger = ['empfaenger_email_adresse@mail.de']
    port = 465
    passwort = ''
    
    message = "Subject: PyWebpageMonitoring\n\n"+errorMessage
    
    try:
        context = ssl.create_default_context()
        server = smtplib.SMTP('smtp.gmail.com')
        server.ehlo()
        server.starttls()
        server.ehlo()
        server.login(absender, passwort)
        server.sendmail(absender, empfaenger, message)         
        print ('E-Mail erfolgreich gesendet')
    except Exception as e:
        print ('Fehler beim absenden der E-Mail')
        print (e)
    finally:
        server.quit()

Du benötigst zusätzlich eine Datei „adressen.txt“ mit den URLs welche das Programm / Skript prüfen soll.

zbsp.:

https://draeger-it.blog
https://google.de

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert