email-amazon/basic_setup/test_migration_email.sh

169 lines
4.9 KiB
Bash

#!/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 <domain> <recipient> [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 "============================================================"