90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
#!/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 <pfad_zur_datei.csv>")
|
|
sys.exit(1)
|
|
|
|
csv_file = sys.argv[1]
|
|
main(csv_file) |