From b2dfb76a7ef8e16d6e0a7e5289bc90dc9662fa38 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Mon, 20 Apr 2026 17:35:36 -0500 Subject: [PATCH] check --- basic_setup/check_logins.py | 90 +++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 basic_setup/check_logins.py diff --git a/basic_setup/check_logins.py b/basic_setup/check_logins.py new file mode 100644 index 0000000..0115126 --- /dev/null +++ b/basic_setup/check_logins.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +import csv +import imaplib +import sys +import time + +# Konfiguration +IMAP_SERVER = "secure.emailsrvr.com" +IMAP_PORT = 993 +DELAY_SECONDS = 1 # Kurze Pause, um Rate-Limiting oder Fail2Ban zu vermeiden + +def check_imap_login(email, password): + try: + # Verbindung zum IMAP-Server via SSL herstellen + mail = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT) + mail.login(email, password) + mail.logout() + return True + except imaplib.IMAP4.error: + # Login fehlgeschlagen (falsches Passwort/User) + return False + except Exception as e: + print(f" [!] Netzwerk- oder Serverfehler bei {email}: {e}") + return False + +def main(csv_filepath): + erfolgreich = [] + fehlgeschlagen = [] + uebersprungen = [] + + try: + with open(csv_filepath, mode='r', encoding='utf-8') as f: + # Nutze csv.reader für sauberes Parsing der Kommas + reader = csv.reader(f) + for row_num, row in enumerate(reader, start=1): + if not row: + continue + + email = row[0].strip() + # Prüfen, ob ein zweites Feld (Passwort) existiert und nicht leer ist + password = row[1].strip() if len(row) > 1 else "" + + if not password: + print(f"[{row_num}] Überspringe {email} (Kein Passwort)") + uebersprungen.append(email) + continue + + print(f"[{row_num}] Prüfe {email}... ", end="", flush=True) + + if check_imap_login(email, password): + print("OK") + erfolgreich.append(email) + else: + print("FEHLGESCHLAGEN") + fehlgeschlagen.append(email) + + # Kurze Pause einlegen, um den Mailserver nicht zu fluten + time.sleep(DELAY_SECONDS) + + except FileNotFoundError: + print(f"\nFehler: Die Datei '{csv_filepath}' wurde nicht gefunden.") + sys.exit(1) + except Exception as e: + print(f"\nEin unerwarteter Fehler ist aufgetreten: {e}") + sys.exit(1) + + # Ausgabe der Zusammenfassung + print("\n" + "="*40) + print("ZUSAMMENFASSUNG DER PRÜFUNG") + print("="*40) + + print(f"\nErfolgreich ({len(erfolgreich)}):") + for e in erfolgreich: + print(f" - {e}") + + print(f"\nFehlgeschlagen ({len(fehlgeschlagen)}):") + for e in fehlgeschlagen: + print(f" - {e}") + + print(f"\nÜbersprungen (kein Passwort) ({len(uebersprungen)}):") + for e in uebersprungen: + print(f" - {e}") + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Verwendung: ./check_logins.py ") + sys.exit(1) + + csv_file = sys.argv[1] + main(csv_file) \ No newline at end of file