From 63d12f8c7c23ec563c57e54184da371e7c9270c9 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Tue, 10 Feb 2026 18:35:45 -0600 Subject: [PATCH] requeue --- basic_setup/requeue_email.sh | 111 +++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100755 basic_setup/requeue_email.sh diff --git a/basic_setup/requeue_email.sh b/basic_setup/requeue_email.sh new file mode 100755 index 0000000..1de3b12 --- /dev/null +++ b/basic_setup/requeue_email.sh @@ -0,0 +1,111 @@ +#!/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 "============================================================" \ No newline at end of file