Patch for blocklist
This commit is contained in:
@@ -4,12 +4,9 @@ Email message processing worker
|
||||
"""
|
||||
|
||||
import json
|
||||
import time
|
||||
import traceback
|
||||
from typing import List, Tuple
|
||||
|
||||
from logger import log
|
||||
from config import config, domain_to_bucket_name
|
||||
from aws import S3Handler, SQSHandler, SESHandler, DynamoDBHandler
|
||||
from email_processing import EmailParser, BounceHandler, RulesProcessor, BlocklistChecker
|
||||
from smtp.delivery import EmailDelivery
|
||||
@@ -17,6 +14,7 @@ from metrics.prometheus import MetricsCollector
|
||||
from email.parser import BytesParser # War wahrscheinlich schon da, prüfen
|
||||
from email.policy import compat32 # <--- NEU: Hinzufügen
|
||||
|
||||
|
||||
class MessageProcessor:
|
||||
"""Processes individual email messages"""
|
||||
|
||||
@@ -105,7 +103,6 @@ class MessageProcessor:
|
||||
log("⚠ Warning: No recipients in event", 'WARNING', worker_name)
|
||||
return True
|
||||
|
||||
bucket = domain_to_bucket_name(domain)
|
||||
key = message_id
|
||||
|
||||
# Compact single-line log for email processing
|
||||
@@ -123,7 +120,7 @@ class MessageProcessor:
|
||||
skip_rules = self.parser.is_processed_by_worker(temp_parsed)
|
||||
|
||||
if skip_rules:
|
||||
log(f"🔄 Loop prevention: Already processed by worker", 'INFO', worker_name)
|
||||
log("🔄 Loop prevention: Already processed by worker", 'INFO', worker_name)
|
||||
|
||||
# 5. PARSING & BOUNCE LOGIC
|
||||
try:
|
||||
@@ -146,7 +143,7 @@ class MessageProcessor:
|
||||
log(f" 🔧 Sanitized malformed Message-ID via Legacy Mode: {clean_id}", 'INFO', worker_name)
|
||||
|
||||
if self.metrics:
|
||||
self.metrics.increment_bounce(domain, 'sanitized_header')
|
||||
self.metrics.increment_bounce(domain, 'sanitized_header')
|
||||
|
||||
except Exception as e_sanitize:
|
||||
# Sollte nicht passieren, aber wir wollen hier nicht abbrechen
|
||||
@@ -163,7 +160,7 @@ class MessageProcessor:
|
||||
# Klammern entfernen, aber spitze Klammern behalten
|
||||
clean_id = current_msg_id.replace('[', '').replace(']', '')
|
||||
parsed.replace_header('Message-ID', clean_id)
|
||||
log(f" 🔧 Sanitized malformed Message-ID", 'INFO', worker_name)
|
||||
log(" 🔧 Sanitized malformed Message-ID", 'INFO', worker_name)
|
||||
# --- FIX END ---
|
||||
|
||||
subject = parsed.get('Subject', '(no subject)')
|
||||
@@ -203,9 +200,25 @@ class MessageProcessor:
|
||||
skip_rules = False
|
||||
|
||||
# 6. BLOCKLIST CHECK (Batch for efficiency)
|
||||
senders_to_check = []
|
||||
|
||||
# 1. Die Envelope-Adresse (aus dem SES Event / Return-Path)
|
||||
if from_addr:
|
||||
senders_to_check.append(from_addr)
|
||||
|
||||
# 2. Die echte Header-Adresse (aus der MIME-E-Mail geparst)
|
||||
header_from = parsed.get('From')
|
||||
if header_from and header_from not in senders_to_check:
|
||||
senders_to_check.append(header_from)
|
||||
|
||||
# 3. Falls die Bounce-Logik die Adresse umgeschrieben hat
|
||||
if from_addr_final and from_addr_final not in senders_to_check:
|
||||
senders_to_check.append(from_addr_final)
|
||||
|
||||
# Prüfe nun alle extrahierten Adressen gegen die Datenbank
|
||||
blocked_by_recipient = self.blocklist.batch_check_blocked_senders(
|
||||
recipients,
|
||||
from_addr_final,
|
||||
senders_to_check, # <-- Übergabe der Liste
|
||||
worker_name
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user