#!/bin/bash # test_migration_email.sh - Stellt eine Test-EMail in S3 + SQS ein # # Simuliert den kompletten SES-Eingang: Mail landet in S3, Metadaten in SQS. # Der Worker holt sie dann ab und verarbeitet sie (Delivery oder Forward). # # Verwendung: # ./test_migration_email.sh cielectrical.com carlosr@cielectrical.com # ./test_migration_email.sh buddelectric.net service@buddelectric.net # # Optionale Absenderadresse: # ./test_migration_email.sh cielectrical.com carlosr@cielectrical.com test@example.com set -e # --- Parameter --- DOMAIN="$1" RECIPIENT="$2" FROM_ADDR="${3:-migration-test@andreasknuth.de}" AWS_REGION=${AWS_REGION:-"us-east-2"} if [ -z "$DOMAIN" ] || [ -z "$RECIPIENT" ]; then echo "Verwendung: $0 [from-address]" echo "Beispiel: $0 cielectrical.com carlosr@cielectrical.com" exit 1 fi # --- Abgeleitete Variablen --- BUCKET_NAME=$(echo "$DOMAIN" | tr '.' '-')"-emails" QUEUE_NAME=$(echo "$DOMAIN" | tr '.' '-')"-queue" MESSAGE_ID="test-migration-$(date +%s)-$$" TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") DATE_RFC2822=$(date -R) echo "============================================================" echo " 📧 Test-Mail für Migration" echo "============================================================" echo " Domain: $DOMAIN" echo " Empfänger: $RECIPIENT" echo " Absender: $FROM_ADDR" echo " Bucket: $BUCKET_NAME" echo " Queue: $QUEUE_NAME" echo " Key: $MESSAGE_ID" echo "" # --- Schritt 1: E-Mail als RFC822 erstellen --- echo "[1/3] Erstelle Test-Email..." MAIL_CONTENT="From: Migration Test <${FROM_ADDR}> To: ${RECIPIENT} Subject: Migration Test $(date '+%Y-%m-%d %H:%M:%S') Date: ${DATE_RFC2822} Message-ID: <${MESSAGE_ID}@test.email-srvr.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Hallo! Dies ist eine Test-EMail zur Validierung der E-Mail-Migration. Gesendet: $(date) Domain: ${DOMAIN} Empfaenger: ${RECIPIENT} Message-ID: ${MESSAGE_ID} Wenn du diese Mail in deiner Inbox siehst, funktioniert der komplette Pfad: S3 -> SQS -> Worker -> Forward/Delivery. -- Bay Area Affiliates Migration Test" TMP_FILE=$(mktemp /tmp/test-mail-XXXXXX.eml) echo "$MAIL_CONTENT" > "$TMP_FILE" echo " ✓ Mail erstellt ($(wc -c < "$TMP_FILE") Bytes)" # --- Schritt 2: In S3 Bucket ablegen --- echo "[2/3] Lade Mail in S3 hoch: s3://${BUCKET_NAME}/${MESSAGE_ID} ..." aws s3 cp "$TMP_FILE" "s3://${BUCKET_NAME}/${MESSAGE_ID}" \ --region "$AWS_REGION" \ --quiet echo " ✓ S3 Upload erfolgreich" # --- Schritt 3: SQS Message im Fake-SNS-Format einstellen --- echo "[3/3] Stelle Message in SQS Queue..." QUEUE_URL=$(aws sqs get-queue-url \ --queue-name "$QUEUE_NAME" \ --region "$AWS_REGION" \ --output text \ --query 'QueueUrl') if [ -z "$QUEUE_URL" ]; then echo " ❌ Queue $QUEUE_NAME nicht gefunden!" rm -f "$TMP_FILE" exit 1 fi # SES Event Payload (das was die Lambda normalerweise erzeugt) SES_DATA=$(jq -n \ --arg msgId "$MESSAGE_ID" \ --arg source "$FROM_ADDR" \ --arg recipient "$RECIPIENT" \ --arg ts "$TIMESTAMP" \ '{ mail: { messageId: $msgId, source: $source, timestamp: $ts, destination: [$recipient] }, receipt: { recipients: [$recipient], timestamp: $ts, action: { type: "S3", bucketName: "test", objectKey: $msgId } } }') # Fake SNS Wrapper (so wie deine Lambda es erzeugt) SQS_BODY=$(jq -n \ --arg sesData "$SES_DATA" \ --arg ts "$TIMESTAMP" \ '{ Type: "Notification", MessageId: "test-\(now | tostring)", TopicArn: "arn:aws:sns:ses-shim:global-topic", Subject: "Amazon SES Email Receipt Notification", Message: $sesData, Timestamp: $ts }') aws sqs send-message \ --queue-url "$QUEUE_URL" \ --region "$AWS_REGION" \ --message-body "$SQS_BODY" \ --output text \ --query 'MessageId' echo " ✓ SQS Message eingestellt" # --- Aufräumen --- rm -f "$TMP_FILE" echo "" echo "============================================================" echo " ✅ Test-Mail eingestellt!" echo "============================================================" echo "" echo " Jetzt Worker-Logs beobachten:" echo " docker logs -f email-worker --tail 50" echo "" echo " Der Worker sollte folgendes zeigen:" echo " 📧 Processing: ${MESSAGE_ID:0:20}... -> ${RECIPIENT}" echo " ✓ Forwarded via legacy SMTP ... (falls Forward-Rule existiert)" echo " ODER" echo " ✓ Delivered to ${RECIPIENT} (falls DMS-Mailbox existiert)" echo "" echo " S3 Objekt prüfen:" echo " aws s3 ls s3://${BUCKET_NAME}/${MESSAGE_ID} --region ${AWS_REGION}" echo "" echo " Falls etwas schief geht - SQS Message manuell prüfen:" echo " aws sqs receive-message --queue-url ${QUEUE_URL} --region ${AWS_REGION}" echo "============================================================"