#!/bin/bash # Simulate Bounce Events for Testing # This script inserts bounce data directly into the database to test the UI # without needing to set up AWS SNS set -e echo "=== Bounce Simulation Script ===" echo echo "This script will create test bounce events for existing members" echo # Get database password from .env DB_PASSWORD=$(grep MYSQL_ROOT_PASSWORD /home/jamesp/docker/maillist/.env | cut -d'=' -f2) # Check if containers are running if ! sudo docker-compose ps | grep -q "maillist-mysql.*Up"; then echo "❌ MySQL container is not running. Starting containers..." sudo docker-compose up -d echo "Waiting for MySQL to be ready..." sleep 5 fi echo "1. Fetching existing members..." echo # Get list of members MEMBERS=$(sudo docker-compose exec -T mysql mysql -u root -p"$DB_PASSWORD" maillist -N -e "SELECT member_id, name, email FROM members LIMIT 5;") if [ -z "$MEMBERS" ]; then echo "❌ No members found in database. Please add members first." exit 1 fi echo "Available members:" echo "$MEMBERS" | while read -r line; do MEMBER_ID=$(echo "$line" | awk '{print $1}') NAME=$(echo "$line" | awk '{print $2, $3}') EMAIL=$(echo "$line" | awk '{$1=""; $2=""; print $0}' | xargs) echo " [$MEMBER_ID] $NAME - $EMAIL" done echo # Prompt for member ID read -p "Enter member ID to simulate bounce for (or press Enter for first member): " MEMBER_ID if [ -z "$MEMBER_ID" ]; then MEMBER_ID=$(echo "$MEMBERS" | head -1 | awk '{print $1}') echo "Using member ID: $MEMBER_ID" fi # Get member details MEMBER_INFO=$(sudo docker-compose exec -T mysql mysql -u root -p"$DB_PASSWORD" maillist -N -e "SELECT member_id, name, email FROM members WHERE member_id = $MEMBER_ID;") if [ -z "$MEMBER_INFO" ]; then echo "❌ Member ID $MEMBER_ID not found" exit 1 fi MEMBER_EMAIL=$(echo "$MEMBER_INFO" | awk '{$1=""; $2=""; print $0}' | xargs) MEMBER_NAME=$(echo "$MEMBER_INFO" | awk '{print $2, $3}') echo echo "Selected member: $MEMBER_NAME ($MEMBER_EMAIL)" echo # Bounce type selection echo "Select bounce type to simulate:" echo " 1) Soft Bounce (Transient - e.g., mailbox full)" echo " 2) Hard Bounce (Permanent - e.g., invalid address)" echo " 3) Multiple Soft Bounces (3 bounces to trigger soft_bounce status)" echo " 4) Undetermined Bounce" echo read -p "Enter choice (1-4): " BOUNCE_CHOICE case $BOUNCE_CHOICE in 1) BOUNCE_TYPE="Transient" BOUNCE_SUBTYPE="MailboxFull" DIAGNOSTIC="smtp; 452 4.2.2 Mailbox full" COUNT=1 ;; 2) BOUNCE_TYPE="Permanent" BOUNCE_SUBTYPE="General" DIAGNOSTIC="smtp; 550 5.1.1 User unknown" COUNT=1 ;; 3) BOUNCE_TYPE="Transient" BOUNCE_SUBTYPE="General" DIAGNOSTIC="smtp; 451 4.4.1 Temporary failure" COUNT=3 ;; 4) BOUNCE_TYPE="Undetermined" BOUNCE_SUBTYPE="" DIAGNOSTIC="Unknown error occurred" COUNT=1 ;; *) echo "Invalid choice" exit 1 ;; esac echo echo "Simulating $COUNT bounce event(s)..." echo # Insert bounce events for i in $(seq 1 $COUNT); do TIMESTAMP=$(date -u -d "-$((i * 24)) hours" '+%Y-%m-%d %H:%M:%S') FEEDBACK_ID="test-feedback-$(date +%s)-$i" echo "Creating bounce event $i/$COUNT (timestamp: $TIMESTAMP)..." sudo docker-compose exec -T mysql mysql -u root -p"$DB_PASSWORD" maillist <