Mail: Spam-Filter + verschaerfter Klassifizierungs-Prompt + erweiterte Sender-Listen

This commit is contained in:
root 2026-03-16 21:21:59 +07:00
parent 983d93a67b
commit 1ec14dd7f5

View file

@ -19,10 +19,20 @@ MAIL_USER = ""
MAIL_PASS = ""
IMPORTANT_SENDERS = [
"paypal", "bank", "sparkasse", "postbank", "dkb",
"paypal", "bank", "sparkasse", "postbank", "dkb", "ing-diba", "comdirect",
"hetzner", "all-inkl", "kasserver", "cloudflare",
"proxmox", "synology", "tailscale",
"finanzamt", "elster", "bundesnetzagentur",
"finanzamt", "elster", "bundesnetzagentur", "polizei", "gericht",
"enbw", "vattenfall", "enso", "stadtwerke",
"sat-reisen", "lufthansa", "vietnam airlines", "booking.com",
"versicherung", "allianz", "huk", "debeka",
]
SPAM_SENDERS = [
"lebensfreunde", "amazon.de/promotion", "promotion@amazon",
"alibaba", "aliexpress", "temu",
"save.tv", "newsletter@bit", "magix", "video deluxe",
"platforms.ae",
]
@ -184,8 +194,13 @@ def search_mail(query: str, days: int = 30, limit: int = 15) -> list[dict]:
m.logout()
def _is_spam_sender(frm_lower: str) -> bool:
"""Prueft ob Absender in der Spam-Liste steht."""
return any(s in frm_lower for s in SPAM_SENDERS)
def get_important_mails(hours: int = 24) -> list[dict]:
"""Mails von wichtigen Absendern (Bank, Hoster, etc.)."""
"""Mails von wichtigen Absendern (Bank, Hoster, etc.), Spam-Sender ausgefiltert."""
m = _connect()
if not m:
return [{"error": "IMAP-Verbindung fehlgeschlagen"}]
@ -200,6 +215,8 @@ def get_important_mails(hours: int = 24) -> list[dict]:
parsed = _parse_mail(msg_data)
if parsed:
frm_lower = parsed["from"].lower()
if _is_spam_sender(frm_lower):
continue
if any(s in frm_lower for s in IMPORTANT_SENDERS):
results.append(parsed)
results.reverse()
@ -211,15 +228,25 @@ def get_important_mails(hours: int = 24) -> list[dict]:
CLASSIFY_PROMPT = """Du bekommst eine Liste von E-Mails (Absender + Betreff).
Klassifiziere JEDE Mail in genau eine Kategorie:
- "wichtig": Rechnungen, Sicherheitswarnungen, Server-Alerts, Bank, Behörden, persönliche Nachrichten
- "aktion": Erfordert eine Handlung (Passwort ändern, Zahlung fällig, Termin bestätigen)
- "info": Nützliche Info aber keine Handlung nötig (Versandbestätigung, Status-Update)
- "newsletter": Newsletter, Marketing, Angebote, Werbung
- "spam": Offensichtlicher Spam, Phishing, unseriös
Klassifiziere JEDE Mail in genau eine Kategorie. Sei STRENG im Zweifel ist es Newsletter oder Spam.
Antworte NUR mit einem JSON-Array. Pro Mail ein Objekt mit "idx" (0-basiert) und "cat" (Kategorie).
Beispiel: [{"idx":0,"cat":"newsletter"},{"idx":1,"cat":"wichtig"}]"""
Kategorien:
- "wichtig": NUR echte persoenliche Nachrichten, Rechnungen, Sicherheitswarnungen (Synology, Server), Bank-Transaktionen, Behoerden, Flugaenderungen, Vertragsrelevantes
- "aktion": Erfordert DRINGENDE Handlung (Passwort aendern, Zahlung faellig, Sicherheitsluecke, Termin bestaetigen)
- "info": Nuetzliche Info OHNE Handlungsbedarf (Versandbestaetigung, Status-Update, Ladebeleg)
- "newsletter": Regelmaessige Newsletter, Markt-Updates, Nachrichten-Digest, Fachzeitschriften, Angebote
- "spam": Werbung, Marketing, Dating-Benachrichtigungen, Phishing, unbekannte Absender mit verdaechtigem Betreff, "Du hast neue Besucher", Rabattaktionen
WICHTIG:
- "Neue Profilbesucher", "Du hast neue Nachrichten" von Dating/Social = SPAM
- Absender mit .ae/.ru/.cn Domain ohne Bezug = SPAM
- "Sale", "Angebot", "nur noch heute", Emojis im Betreff = NEWSLETTER oder SPAM
- Taegliche Markt-/Aktien-Updates = NEWSLETTER
- Synology Sicherheitswarnungen = AKTION
- Rechnungen (EnBW, Telekom etc.) = WICHTIG
Antworte NUR mit einem JSON-Array. Pro Mail ein Objekt mit "idx" (0-basiert) und "cat".
Beispiel: [{"idx":0,"cat":"spam"},{"idx":1,"cat":"wichtig"}]"""
def classify_mails(mails: list[dict], api_key: str) -> list[dict]: