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:
- 2-Faktor-Authentifizierung im Google-Konto aktivieren
- Google-Konto → Sicherheit → App-Passwörter
- Passwort für „Mail" auf „Andere" generieren
- 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:
| Kanal | Library | Ideal für |
|---|---|---|
| Slack | slack_sdk | Team-Benachrichtigungen, Kanal-Alerts |
| Microsoft Teams | pymsteams | Firmenumgebungen mit Microsoft 365 |
| Telegram | python-telegram-bot | Mobile Alerts, persönliche Benachrichtigungen |
| Discord | discord-webhook | Community-Bots, persönliche Alerts |
| Desktop | plyer | Lokale Popup-Benachrichtigungen |
In deutschen Firmen ist Teams oft die erste Wahl — da lohnt sich die pymsteams-Integration besonders.
Best Practices für Benachrichtigungen
| Praxis | Warum | Umsetzung |
|---|---|---|
| Alerts drosseln | Alert-Stürme verhindern | Cooldown pro Bedingung + globales Cap |
| Kontext mitliefern | Empfänger brauchen handlungsfähige Infos | Was ausgelöst, aktueller Wert, Schwellwert, Link zu Details |
| Plain-Text-Fallback | Nicht alle Clients rendern HTML | MIME multipart mit beiden Formaten |
| Erst an dich testen | Formatierungsfehler finden bevor das Team sie sieht | Erst an eigene Adresse senden |
| Abmeldemöglichkeit | Empfänger respektieren | Konfigurationsdatei 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
Erst das Quiz oben abschließen
Lektion abgeschlossen!