diff --git a/ses-lambda-new-python/lambda_function.py b/ses-lambda-new-python/lambda_function.py index ebec032..738dca5 100644 --- a/ses-lambda-new-python/lambda_function.py +++ b/ses-lambda-new-python/lambda_function.py @@ -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)}" - } + } \ No newline at end of file