Lektion 6 12 Min.

E-Mail & Benachrichtigungen automatisieren

Automatisiere E-Mail-Versand und Benachrichtigungen mit Python — geplante Reports, Alerts mit Drosselung, HTML-Mails und Integration mit Slack, Telegram und Teams.

🔄 Kurzer Rückblick: In der letzten Lektion hast du REST-APIs integriert — Daten abrufen, Paginierung und Authentifizierung. Jetzt kommt die Kommunikationsschicht: E-Mails und Benachrichtigungen aus deinen Automatisierungsskripten versenden.

E-Mails und Benachrichtigungen verwandeln deine Skripte von Tools, die du manuell aufrufst, in Systeme, die Ergebnisse kommunizieren, Alerts senden und Reports nach Zeitplan liefern.

E-Mail senden mit Python

Pythons smtplib übernimmt den SMTP-Versand. Für moderne Accounts brauchst du in der Regel ein App-spezifisches Passwort (nicht dein normales Passwort).

Gmail App-Passwort einrichten:

  1. 2-Faktor-Authentifizierung im Google-Konto aktivieren
  2. Google-Konto → Sicherheit → App-Passwörter
  3. Passwort für „Mail" auf „Andere" generieren
  4. In deiner .env-Datei speichern

Skript 1: E-Mail-Versand-Funktion

KI-Prompt:

Schreib ein Python-Skript, das E-Mails per smtplib sendet: (1) SMTP-Zugangsdaten aus Umgebungsvariablen lesen (SMTP_SERVER, SMTP_PORT, EMAIL_USER, EMAIL_PASSWORD), (2) Plain Text und HTML-Body unterstützen, (3) Dateianhänge (CSV, Excel, PDF), (4) Empfänger, Betreff und Body als Funktionsparameter, (5) Fehlerbehandlung für Verbindungsfehler, Authentifizierung und Sendefehler. Wiederverwendbare send_email()-Funktion zum Importieren.

Core E-Mail-Versand-Muster:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# 1. Nachricht erstellen
msg = MIMEMultipart("alternative")
msg["Subject"] = "Täglicher Report"
msg["From"] = absender
msg["To"] = ", ".join(empfaenger)

# 2. Plain Text und HTML anhängen
msg.attach(MIMEText(plain_text, "plain"))
msg.attach(MIMEText(html_inhalt, "html"))

# 3. Senden
with smtplib.SMTP(smtp_server, port) as server:
    server.starttls()
    server.login(benutzername, passwort)
    server.send_message(msg)

Skript 2: HTML-Report-Mail

KI-Prompt:

Schreib eine Python-Funktion, die einen HTML-Report aus einem pandas DataFrame generiert: (1) DataFrame als HTML-Tabelle mit Inline-CSS: abwechselnde Zeilenfarben, fette Header, rechtsbündige Zahlen, (2) Zusammenfassung über der Tabelle: Gesamtzeilen, Kennzahlen (Summe, Durchschnitt numerischer Spalten), (3) Report-Datum und kurze Überschrift, (4) Plain-Text-Alternative als formatierte Texttabelle, (5) Rohdaten als CSV-Anhang. Ich will die Funktion aus meinen Datenverarbeitungsskripten aufrufen, um Ergebnisse automatisch zu mailen.

Skript 3: Bedingte Alerts mit Drosselung

KI-Prompt:

Schreib ein Python-Alert-System das Bedingungen überwacht und Benachrichtigungen sendet: (1) Liste von Bedingungen prüfen (z.B. „Preis unter 50€", „Artikel nicht auf Lager", „API-Antwortzeit > 5 Sekunden"), (2) Für jede ausgelöste Bedingung E-Mail-Alert mit Details, (3) Alerts drosseln: max 1 Alert pro Bedingung pro Stunde (in lokaler JSON-Datei tracken), (4) Globales Cap: max 10 Alerts pro Stunde gesamt, (5) Alle Alerts (gesendet und unterdrückt) in CSV loggen, (6) Dringlichkeitsstufen: „info" (nur E-Mail), „warnung" (E-Mail + Konsole), „kritisch" (E-Mail + Konsole + Wiederholung nach 15 Min).

Alternative Benachrichtigungskanäle

E-Mail ist halt nicht der einzige Weg. Viele Automatisierungsskripte profitieren von Instant Messaging:

KanalLibraryIdeal für
Slackslack_sdkTeam-Benachrichtigungen, Kanal-Alerts
Microsoft TeamspymsteamsFirmenumgebungen mit Microsoft 365
Telegrampython-telegram-botMobile Alerts, persönliche Benachrichtigungen
Discorddiscord-webhookCommunity-Bots, persönliche Alerts
DesktopplyerLokale Popup-Benachrichtigungen

In deutschen Firmen ist Teams oft die erste Wahl — da lohnt sich die pymsteams-Integration besonders.

Best Practices für Benachrichtigungen

PraxisWarumUmsetzung
Alerts drosselnAlert-Stürme verhindernCooldown pro Bedingung + globales Cap
Kontext mitliefernEmpfänger brauchen handlungsfähige InfosWas ausgelöst, aktueller Wert, Schwellwert, Link zu Details
Plain-Text-FallbackNicht alle Clients rendern HTMLMIME multipart mit beiden Formaten
Erst an dich testenFormatierungsfehler finden bevor das Team sie siehtErst an eigene Adresse senden
AbmeldemöglichkeitEmpfänger respektierenKonfigurationsdatei für Benachrichtigungspräferenzen

Quick Check: Dein Skript sendet tägliche Mails um 8 Uhr. Am Wochenende soll es nicht senden. Wo gehört diese Logik hin — ins Mail-Skript oder in den Scheduler? (Antwort: In den Scheduler, nicht ins Mail-Skript. Das Mail-Skript soll Mails zusammenbauen und senden wenn es aufgerufen wird. Der Scheduler entscheidet wann aufgerufen wird. Trennung der Zuständigkeiten bedeutet: Du kannst das Mail-Skript für andere Zeitpläne wiederverwenden — Wochenzusammenfassung freitags, Ad-hoc-Alerts jederzeit.)

Key Takeaways

  • Nie E-Mail-Zugangsdaten hardcoden — Umgebungsvariablen oder App-Passwörter nutzen, die einzeln widerrufbar sind; transaktionale E-Mail-Dienste (SendGrid, Mailgun) mit reinen Sende-API-Keys sind noch sicherer als SMTP mit deinem persönlichen Passwort
  • Alert-Drosselung von Anfang an einbauen: Cooldown pro Bedingung, globales Alert-Cap und De-Duplikation verhindern, dass ein einziger Fehler dein Postfach mit hunderten Benachrichtigungen flutet — das schützt auch vor Bugs die du noch gar nicht geschrieben hast
  • HTML-Mails mit einfachen Inline-CSS-Tabellen machen automatisierte Reports sofort lesbar ohne Anhänge öffnen zu müssen — immer einen Plain-Text-Fallback mitschicken, weil manche Mail-Clients HTML entfernen

Up Next

In der nächsten Lektion lernst du Zeitplanung und Fehlerbehandlung — Skripte automatisch nach Zeitplan ausführen und robust genug machen, dass sie unbeaufsichtigt laufen.

Wissenscheck

1. Dein Automatisierungsskript verschickt tägliche Verkaufsreports per E-Mail. Du hast das SMTP-Passwort direkt im Skript hardcoded. Ein Kollege sagt, das sei ein Sicherheitsrisiko. Du antwortest: 'Ist ja nur ein E-Mail-Passwort, kein API-Key.' Hat dein Kollege Recht?

2. Dein Alert-Skript schickt dir eine E-Mail wenn ein Preis unter 50€ fällt. Heute gibt die API für ein Produkt einen Fehler zurück, und dein Skript verschickt 100 Alert-Mails in 10 Minuten (der Fehler triggert die Prüfung wiederholt). Wie verhinderst du das?

3. Du willst einen täglichen Report um 8 Uhr per Mail verschicken mit einer Tabelle der gestrigen Verkäufe. Plain Text oder HTML?

Beantworte alle Fragen zum Prüfen

Erst das Quiz oben abschließen

Passende Skills