#!/bin/bash # requeue_email.sh # Nimmt eine existierende Email aus S3 und stellt ein Event in die SQS Queue, # um eine erneute Verarbeitung durch den Worker auszulösen. set -e # --- Parameter --- DOMAIN="$1" RECIPIENT="$2" MESSAGE_ID="$3" # Das ist der S3 Key (die lange Zeichenkette aus dem Log) AWS_REGION=${AWS_REGION:-"us-east-2"} if [ -z "$DOMAIN" ] || [ -z "$RECIPIENT" ] || [ -z "$MESSAGE_ID" ]; then echo "Usage: $0 " echo "Example: $0 buddelectric.net Tyler@buddelectric.net cn8j6j970atkh7n3fstdhgqr9imgrivegnm70jg1" exit 1 fi # --- Variablen ableiten --- BUCKET_NAME=$(echo "$DOMAIN" | tr '.' '-')"-emails" QUEUE_NAME=$(echo "$DOMAIN" | tr '.' '-')"-queue" TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ") echo "============================================================" echo " Requeue S3 Email" echo "============================================================" echo " Domain: $DOMAIN" echo " Recipient: $RECIPIENT" echo " Bucket: $BUCKET_NAME" echo " Key (ID): $MESSAGE_ID" echo "" # --- Schritt 1: Prüfen ob S3 Objekt existiert --- echo "[1/2] Checking S3 object: s3://${BUCKET_NAME}/${MESSAGE_ID} ..." if aws s3 ls "s3://${BUCKET_NAME}/${MESSAGE_ID}" --region "$AWS_REGION" > /dev/null 2>&1; then echo " ✓ Object found." else echo " ❌ ERROR: Object s3://${BUCKET_NAME}/${MESSAGE_ID} does not exist!" exit 1 fi # --- Schritt 2: Nachricht in SQS stellen --- echo "[2/2] Placing 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 " ❌ ERROR: Queue $QUEUE_NAME not found!" exit 1 fi # SES event payload (Simuliert die Lambda-Ausgabe) # Wir nutzen "requeue@admin" als Source, da der Worker den echten Absender # ohnehin aus den Email-Headern im S3-File parst. SES_DATA=$(jq -n \ --arg msgId "$MESSAGE_ID" \ --arg source "requeue-admin@${DOMAIN}" \ --arg recipient "$RECIPIENT" \ --arg ts "$TIMESTAMP" \ --arg bucket "$BUCKET_NAME" \ '{ mail: { messageId: $msgId, source: $source, timestamp: $ts, destination: [$recipient] }, receipt: { recipients: [$recipient], timestamp: $ts, action: { type: "S3", bucketName: $bucket, objectKey: $msgId } } }') # Fake SNS wrapper (Gleiches Format wie Lambda Shim) SQS_BODY=$(jq -n \ --arg sesData "$SES_DATA" \ --arg ts "$TIMESTAMP" \ '{ Type: "Notification", MessageId: "requeue-\(now | tostring)", TopicArn: "arn:aws:sns:ses-shim:global-topic", Subject: "Amazon SES Email Receipt Notification", Message: $sesData, Timestamp: $ts }') # Senden SQS_MSG_ID=$(aws sqs send-message \ --queue-url "$QUEUE_URL" \ --region "$AWS_REGION" \ --message-body "$SQS_BODY" \ --output text \ --query 'MessageId') echo " ✓ Done (SQS MessageId: ${SQS_MSG_ID})" echo "" echo "============================================================" echo " Email successfully requeued!" echo " Worker should pick it up immediately." echo "============================================================"