Forward-Rule mit smtp_override → Mail geht nur zum alten Provider, keine DMS-Delivery

Forward-Rule ohne smtp_override → normaler Forward + DMS-Delivery (bestehendes Verhalten)
Keine Rule → nur DMS-Delivery (bestehendes Verhalten)
This commit is contained in:
Andreas Knuth 2026-02-10 11:57:10 -06:00
parent 994cf9055c
commit 3bd1ed14cf
2 changed files with 30 additions and 28 deletions

View File

@ -44,7 +44,7 @@ class RulesProcessor:
rule = self.dynamodb.get_email_rules(recipient) rule = self.dynamodb.get_email_rules(recipient)
if not rule: if not rule:
return return False # NEU: Return-Wert
original_from = parsed.get('From', '') original_from = parsed.get('From', '')
sender_name, sender_addr = parseaddr(original_from) sender_name, sender_addr = parseaddr(original_from)
@ -69,17 +69,16 @@ class RulesProcessor:
# Forward handling # Forward handling
# ============================================ # ============================================
forwards = rule.get('forwards', []) forwards = rule.get('forwards', [])
has_legacy_forward = False # NEU
if forwards: if forwards:
if rule.get('forward_smtp_override'):
has_legacy_forward = True # NEU
self._handle_forwards( self._handle_forwards(
recipient, recipient, parsed, original_from, forwards,
parsed, domain, worker_name, metrics_callback, rule=rule
original_from,
forwards,
domain,
worker_name,
metrics_callback,
rule=rule
) )
return has_legacy_forward # NEU: statt kein Return
def _handle_ooo( def _handle_ooo(
self, self,

View File

@ -184,6 +184,7 @@ class MessageProcessor:
continue continue
# Process rules (OOO, Forwarding) - not for bounces or already forwarded # Process rules (OOO, Forwarding) - not for bounces or already forwarded
skip_local_delivery = False # NEU
if not is_bounce and not skip_rules: if not is_bounce and not skip_rules:
def metrics_callback(action_type: str, dom: str): def metrics_callback(action_type: str, dom: str):
"""Callback for metrics from rules processor""" """Callback for metrics from rules processor"""
@ -193,7 +194,7 @@ class MessageProcessor:
elif action_type == 'forward': elif action_type == 'forward':
self.metrics.increment_forward(dom) self.metrics.increment_forward(dom)
self.rules_processor.process_rules_for_recipient( skip_local_delivery = self.rules_processor.process_rules_for_recipient(
recipient, recipient,
parsed, parsed,
domain, domain,
@ -202,25 +203,27 @@ class MessageProcessor:
) )
# SMTP Delivery # SMTP Delivery
success, error, is_perm = self.delivery.send_to_recipient( if skip_local_delivery: # NEU
from_addr_final, log(f" ⏭ Skipping local delivery for {recipient} (legacy forward active)",
recipient, 'INFO', worker_name)
raw_bytes, successful.append(recipient) # Zählt als "handled"
worker_name
)
if success:
successful.append(recipient)
if self.metrics:
self.metrics.increment_processed(domain, 'success')
elif is_perm:
failed_permanent.append(recipient)
if self.metrics:
self.metrics.increment_processed(domain, 'permanent_failure')
else: else:
failed_temporary.append(recipient) success, error, is_perm = self.delivery.send_to_recipient(
if self.metrics: from_addr_final, recipient, raw_bytes, worker_name
self.metrics.increment_processed(domain, 'temporary_failure') )
if success:
successful.append(recipient)
if self.metrics:
self.metrics.increment_processed(domain, 'success')
elif is_perm:
failed_permanent.append(recipient)
if self.metrics:
self.metrics.increment_processed(domain, 'permanent_failure')
else:
failed_temporary.append(recipient)
if self.metrics:
self.metrics.increment_processed(domain, 'temporary_failure')
# 8. RESULT & CLEANUP # 8. RESULT & CLEANUP
total_handled = len(successful) + len(failed_permanent) + len(blocked_recipients) total_handled = len(successful) + len(failed_permanent) + len(blocked_recipients)