This commit is contained in:
Andreas Knuth 2025-09-17 17:19:34 -05:00
parent ce296ecdab
commit a709172a99
1 changed files with 8 additions and 7 deletions

View File

@ -1,4 +1,3 @@
# lambda_andreasknuth.py
import os import os
import boto3 import boto3
import smtplib import smtplib
@ -140,11 +139,10 @@ def lambda_handler(event, context):
delivered = [] delivered = []
refused = {} refused = {}
if recipients: if recipients:
# Prepare message string for sendmail (decode bytes safely) # WICHTIG: Verwenden Sie die rohen Bytes direkt, NICHT dekodieren!
try: # smtplib.sendmail() akzeptiert sowohl bytes als auch strings
raw_message = raw_bytes.decode('utf-8') # Bei bytes wird keine weitere Kodierung vorgenommen
except Exception: raw_message = raw_bytes
raw_message = raw_bytes.decode('utf-8', errors='replace')
# Determine a sensible local hostname (HELO). Prefer explicit ENV, else use domain of bucket (recipient domain). # Determine a sensible local hostname (HELO). Prefer explicit ENV, else use domain of bucket (recipient domain).
env_local = os.environ.get('SMTP_LOCAL_HOSTNAME') env_local = os.environ.get('SMTP_LOCAL_HOSTNAME')
@ -171,6 +169,7 @@ def lambda_handler(event, context):
print("SMTP login failed (continuing):", e) print("SMTP login failed (continuing):", e)
try: try:
# Sende die rohen Bytes direkt
send_result = smtp.sendmail(frm_addr, recipients, raw_message) send_result = smtp.sendmail(frm_addr, recipients, raw_message)
# sendmail returns dict of refused recipients # sendmail returns dict of refused recipients
if isinstance(send_result, dict): if isinstance(send_result, dict):
@ -189,10 +188,12 @@ def lambda_handler(event, context):
delivered = [r for r in recipients if r not in refused] delivered = [r for r in recipients if r not in refused]
except Exception as e: except Exception as e:
print("SMTP sendmail error:", e) print("SMTP sendmail error:", e)
traceback.print_exc() # Mehr Details für Debugging
refused = {r: ('error', str(e)) for r in recipients} refused = {r: ('error', str(e)) for r in recipients}
delivered = [] delivered = []
except Exception as e: except Exception as e:
print("Error connecting to SMTP host:", e) print("Error connecting to SMTP host:", e)
traceback.print_exc() # Mehr Details für Debugging
refused = {r: ('connect-error', str(e)) for r in recipients} refused = {r: ('connect-error', str(e)) for r in recipients}
delivered = [] delivered = []
print(f"SMTP completed in {time.time()-start:.2f}s delivered={delivered} refused={refused}") print(f"SMTP completed in {time.time()-start:.2f}s delivered={delivered} refused={refused}")
@ -211,4 +212,4 @@ def lambda_handler(event, context):
return { return {
'statusCode': 200, 'statusCode': 200,
'body': f"processed={bool(delivered)}, delivered={delivered}, refused_count={len(refused)}" 'body': f"processed={bool(delivered)}, delivered={delivered}, refused_count={len(refused)}"
} }