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