Mail: Spam-Filter + verschaerfter Klassifizierungs-Prompt + erweiterte Sender-Listen
This commit is contained in:
parent
983d93a67b
commit
1ec14dd7f5
1 changed files with 38 additions and 11 deletions
|
|
@ -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]:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue