extract_body
This commit is contained in:
parent
1babc68655
commit
3c59075bd1
29
worker.py
29
worker.py
|
|
@ -414,6 +414,29 @@ def send_email(from_addr: str, recipient: str, raw_message: bytes) -> tuple:
|
||||||
log(f" ✗ {recipient}: Connection error - {e}", 'ERROR')
|
log(f" ✗ {recipient}: Connection error - {e}", 'ERROR')
|
||||||
return False, str(e), False
|
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
|
# HAUPTFUNKTION: PROCESS MESSAGE
|
||||||
|
|
@ -517,11 +540,7 @@ def process_message(message_body: dict, receive_count: int) -> bool:
|
||||||
from_addr_final = from_addr
|
from_addr_final = from_addr
|
||||||
|
|
||||||
# Neu: Original-Body extrahieren (für OOO und Forward)
|
# Neu: Original-Body extrahieren (für OOO und Forward)
|
||||||
try:
|
original_body = extract_body(parsed)
|
||||||
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 = ""
|
|
||||||
|
|
||||||
# 5. OOO & FORWARD LOGIC (neu, vor SMTP-Versand)
|
# 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
|
if rules_table and not is_ses_bounce_or_autoreply(parsed): # Vermeide Loops bei Bounces/Auto-Replies
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue