extract_body

This commit is contained in:
Andreas Knuth 2025-12-17 15:21:28 -06:00
parent 1babc68655
commit 3c59075bd1
1 changed files with 24 additions and 5 deletions

View File

@ -414,6 +414,29 @@ def send_email(from_addr: str, recipient: str, raw_message: bytes) -> tuple:
log(f"{recipient}: Connection error - {e}", 'ERROR')
return False, str(e), False
def extract_body(parsed):
"""Extrahiert den Body als String, handhabt multipart und priorisiert text/plain oder text/html."""
body = ''
if parsed.is_multipart():
for part in parsed.walk():
if part.get_content_type() == 'text/plain':
try:
body += part.get_payload(decode=True).decode('utf-8', errors='ignore') + '\n'
except Exception as e:
log(f"⚠ Error decoding text/plain part: {e}", 'WARNING')
elif part.get_content_type() == 'text/html' and not body: # Fallback zu HTML, wenn kein Plain
try:
body += part.get_payload(decode=True).decode('utf-8', errors='ignore') + '\n'
except Exception as e:
log(f"⚠ Error decoding text/html part: {e}", 'WARNING')
else:
try:
body = parsed.get_payload(decode=True).decode('utf-8', errors='ignore')
except Exception as e:
log(f"⚠ Error decoding non-multipart body: {e}", 'WARNING')
body = str(parsed.get_payload()) # Fallback zu raw String
return body.strip() if body else '(No body content)'
# ==========================================
# HAUPTFUNKTION: PROCESS MESSAGE
@ -517,11 +540,7 @@ def process_message(message_body: dict, receive_count: int) -> bool:
from_addr_final = from_addr
# Neu: Original-Body extrahieren (für OOO und Forward)
try:
original_body = str(parsed.get_payload(decode=True))
except Exception as e:
log(f"⚠ Error extracting original body: {e}. Using empty body.", 'WARNING')
original_body = ""
original_body = extract_body(parsed)
# 5. OOO & FORWARD LOGIC (neu, vor SMTP-Versand)
if rules_table and not is_ses_bounce_or_autoreply(parsed): # Vermeide Loops bei Bounces/Auto-Replies