2 Filter
Ralf Warmuth edited this page 2025-11-20 22:58:19 +01:00

Filter

Filter definieren, welche E-Mails verarbeitet werden und welche Aktionen ausgeführt werden sollen. Filter werden in YAML-Dateien gespeichert (z.B. filters/work_rules.yaml).

Filter-Struktur

Jeder Filter benötigt:

  • name: Eindeutiger Name des Filters
  • criteria: Kriterien, die erfüllt sein müssen (siehe Filterkriterien)
  • action: Aktion, die ausgeführt wird (siehe Aktionen)

Optionale Felder:

  • enabled: Filter aktivieren/deaktivieren (default: true)
  • priority: Priorität des Filters (höher = wichtiger, default: 0)
  • stop: Stoppt weitere Regelprüfungen nach diesem Filter (default: false)
  • mark_as_read: E-Mail als gelesen markieren (default: true)
  • mark_as_starred: E-Mail als starred markieren (default: false)
  • save_attachments: Anhänge speichern (default: false)
  • attachment_directory: Verzeichnis für Anhänge (relativ zu attachment_base_directory)

Beispiel

filters:
  - name: "Wichtige Mails"
    enabled: true
    priority: 100
    stop: false
    criteria:
      from: "boss@company.com"
    mark_as_read: true
    mark_as_starred: true
    action:
      type: "move"
      target_folder: "INBOX.Important"
      max_retries: 3

Filterkriterien

Alle Kriterien innerhalb eines Filters werden mit AND-Logik kombiniert (alle müssen erfüllt sein). Bei Listen wird OR-Logik verwendet (mindestens einer muss passen).

Absender

  • from: Exakter Match oder Regex auf Absender-Adresse

    from: "sender@example.com"
    from: ["sender1@example.com", "sender2@example.com"]  # OR-Logik
    from: ".*@example\\.com"  # Regex
    
  • from_domain: Match auf Domain des Absenders

    from_domain: "example.com"
    from_domain: ["example.com", "test.com"]  # OR-Logik
    

Empfänger

  • to: Match auf TO-Empfänger

    to: "recipient@example.com"
    to: ["user1@example.com", "user2@example.com"]  # OR-Logik
    
  • cc: Match auf CC-Empfänger

    cc: "cc@example.com"
    
  • bcc: Match auf BCC-Empfänger

    bcc: "bcc@example.com"
    

Betreff

  • subject_contains: Enthält Text im Betreff (case-insensitive)

    subject_contains: "Wichtig"
    subject_contains: ["Wichtig", "Dringend"]  # OR-Logik
    
  • subject_matches: Regex-Match auf Betreff

    subject_matches: ".*\\[Ticket #\\d+\\].*"
    

Body

  • body_contains: Enthält Text im Body (durchsucht Text- und HTML-Body, case-insensitive)

    body_contains: "Rechnung"
    body_contains: ["Rechnung", "Invoice"]  # OR-Logik
    
  • body_matches: Regex-Match auf Body (Text oder HTML)

    body_matches: ".*Bestellung.*\\d+.*"
    
  • body_text_contains: Enthält Text nur im Text-Body

    body_text_contains: "Wichtige Information"
    
  • body_html_contains: Enthält Text nur im HTML-Body (HTML-Tags werden entfernt)

    body_html_contains: "Link"
    

Anhänge

  • has_attachment: Prüft, ob E-Mail Anhänge hat

    has_attachment: true
    
  • attachment_name_contains: Enthält Text im Anhang-Namen (case-insensitive)

    attachment_name_contains: ".pdf"
    attachment_name_contains: [".pdf", ".xlsx"]  # OR-Logik
    

Größe

  • size_greater_than: E-Mail größer als X Bytes

    size_greater_than: 1048576  # 1 MB
    
  • size_less_than: E-Mail kleiner als X Bytes

    size_less_than: 5242880  # 5 MB
    

Datum

  • date_after: E-Mail nach diesem Datum

    date_after: "2024-01-01"
    date_after: "30 days ago"  # Relatives Datum
    date_after: "2 hours ago"
    
  • date_before: E-Mail vor diesem Datum

    date_before: "2024-12-31"
    date_before: "30 days ago"
    

Header

  • header_contains: Match auf Header-Felder (dict)
    header_contains:
      "X-Priority": "1"
      "List-ID": "example.com"
    

Prioritätssystem

Filter können Prioritäten haben (höher = wichtiger):

filters:
  - name: "Wichtig"
    priority: 100
    stop: true  # Stoppt weitere Regelprüfungen
    # ...
  - name: "Normal"
    priority: 50
    stop: false  # Weitere Regeln werden noch geprüft
    # ...
  • Filter werden nach Priorität sortiert (höhere Priorität zuerst)
  • Mehrere Aktionen pro E-Mail möglich (außer bei stop: true oder delete)
  • delete stoppt automatisch weitere Aktionen

Filter aktivieren/deaktivieren

Filter können temporär deaktiviert werden:

filters:
  - name: "Temporär deaktiviert"
    enabled: false  # Filter wird übersprungen
    criteria:
      from: "test@example.com"
    action:
      type: "move"
      target_folder: "INBOX.Test"

Markierungs-Attribute

Jeder Filter kann optional festlegen, wie verarbeitete E-Mails markiert werden:

filters:
  - name: "Wichtige Mails"
    criteria:
      from: "boss@company.com"
    mark_as_read: true      # Optional: als gelesen markieren (default: true)
    mark_as_starred: true   # Optional: als starred markieren (default: false)
    action:
      type: "move"
      target_folder: "INBOX.Important"
  
  - name: "Zu prüfende Mails"
    criteria:
      subject_contains: "ticket"
    mark_as_read: false     # Als ungelesen markieren
    mark_as_starred: true   # Als starred markieren
    action:
      type: "reply"
      template: "templates/reply.txt"

Verhalten:

  • mark_as_read (default: true): Markiert E-Mail als gelesen (true) oder ungelesen (false)
  • mark_as_starred (default: false): Markiert E-Mail als starred (true) oder unstarred (false)
  • Wenn mehrere Filter matchen, werden die Werte des Filters mit höchster Priorität verwendet
  • Markierungen werden nur angewendet, wenn eine Aktion erfolgreich ausgeführt wurde
  • Bei dry-run werden keine Markierungen angewendet

Anhang-Speicherung

Anhänge können automatisch gespeichert werden:

filters:
  - name: "Reports mit Anhängen verarbeiten"
    criteria:
      from: "reports@company.com"
      has_attachment: true
    save_attachments: true
    attachment_directory: "attachments/work/reports"
    action:
      type: "script"
      path: "scripts/process_report.sh"
  • save_attachments: Aktiviert Anhang-Speicherung (default: false)
  • attachment_directory: Verzeichnis für Anhänge (relativ zu attachment_base_directory)
  • Anhänge werden als {uid}_{filename} gespeichert

Weitere Informationen