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 = ""
|
MAIL_PASS = ""
|
||||||
|
|
||||||
IMPORTANT_SENDERS = [
|
IMPORTANT_SENDERS = [
|
||||||
"paypal", "bank", "sparkasse", "postbank", "dkb",
|
"paypal", "bank", "sparkasse", "postbank", "dkb", "ing-diba", "comdirect",
|
||||||
"hetzner", "all-inkl", "kasserver", "cloudflare",
|
"hetzner", "all-inkl", "kasserver", "cloudflare",
|
||||||
"proxmox", "synology", "tailscale",
|
"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()
|
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]:
|
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()
|
m = _connect()
|
||||||
if not m:
|
if not m:
|
||||||
return [{"error": "IMAP-Verbindung fehlgeschlagen"}]
|
return [{"error": "IMAP-Verbindung fehlgeschlagen"}]
|
||||||
|
|
@ -200,6 +215,8 @@ def get_important_mails(hours: int = 24) -> list[dict]:
|
||||||
parsed = _parse_mail(msg_data)
|
parsed = _parse_mail(msg_data)
|
||||||
if parsed:
|
if parsed:
|
||||||
frm_lower = parsed["from"].lower()
|
frm_lower = parsed["from"].lower()
|
||||||
|
if _is_spam_sender(frm_lower):
|
||||||
|
continue
|
||||||
if any(s in frm_lower for s in IMPORTANT_SENDERS):
|
if any(s in frm_lower for s in IMPORTANT_SENDERS):
|
||||||
results.append(parsed)
|
results.append(parsed)
|
||||||
results.reverse()
|
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).
|
CLASSIFY_PROMPT = """Du bekommst eine Liste von E-Mails (Absender + Betreff).
|
||||||
Klassifiziere JEDE Mail in genau eine Kategorie:
|
Klassifiziere JEDE Mail in genau eine Kategorie. Sei STRENG — im Zweifel ist es Newsletter oder Spam.
|
||||||
- "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
|
|
||||||
|
|
||||||
Antworte NUR mit einem JSON-Array. Pro Mail ein Objekt mit "idx" (0-basiert) und "cat" (Kategorie).
|
Kategorien:
|
||||||
Beispiel: [{"idx":0,"cat":"newsletter"},{"idx":1,"cat":"wichtig"}]"""
|
- "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]:
|
def classify_mails(mails: list[dict], api_key: str) -> list[dict]:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue