mail inboxes
This commit is contained in:
parent
11f0cf031a
commit
160ea900e1
|
|
@ -0,0 +1,123 @@
|
|||
#!/bin/bash
|
||||
# manage_mail_user.sh
|
||||
# Verwaltet E-Mail-User im DMS und synchronisiert die Liste mit AWS SES
|
||||
#
|
||||
# Usage:
|
||||
# ./manage_mail_user.sh add user@domain.com "Password123"
|
||||
# ./manage_mail_user.sh del user@domain.com
|
||||
# ./manage_mail_user.sh sync domain.com
|
||||
|
||||
set -e
|
||||
|
||||
COMMAND=$1
|
||||
EMAIL=$2
|
||||
PASSWORD=$3
|
||||
|
||||
# Container Name deines DMS
|
||||
DMS_CONTAINER="mailserver-new"
|
||||
AWS_REGION="us-east-2"
|
||||
|
||||
# Hilfsfunktion: Usage
|
||||
usage() {
|
||||
echo "Verwendung:"
|
||||
echo " Account anlegen: $0 add <email> <password>"
|
||||
echo " Account löschen: $0 del <email>"
|
||||
echo " Nur Sync zu AWS: $0 sync <domain>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Parameter prüfen
|
||||
if [ -z "$COMMAND" ]; then usage; fi
|
||||
|
||||
# Domain extrahieren (falls Email gegeben)
|
||||
if [ "$COMMAND" != "sync" ]; then
|
||||
if [ -z "$EMAIL" ]; then usage; fi
|
||||
DOMAIN=$(echo "$EMAIL" | cut -d'@' -f2)
|
||||
else
|
||||
# Beim Sync ist der 2. Parameter die Domain
|
||||
DOMAIN=$2
|
||||
if [ -z "$DOMAIN" ]; then usage; fi
|
||||
fi
|
||||
|
||||
# Regel-Namen konstruieren (Dein Namensschema: store-domain-com-to-s3)
|
||||
RULE_SET_NAME="bizmatch-ruleset" # Dein globaler Ruleset Name
|
||||
RULE_NAME="store-${DOMAIN//./-}-to-s3"
|
||||
|
||||
echo "============================================================"
|
||||
echo "Managing User for Domain: $DOMAIN"
|
||||
echo "Action: $COMMAND"
|
||||
echo "SES Rule: $RULE_NAME"
|
||||
echo "============================================================"
|
||||
|
||||
# 1. Aktion im Docker Mailserver ausführen
|
||||
if [ "$COMMAND" == "add" ]; then
|
||||
if [ -z "$PASSWORD" ]; then
|
||||
echo "Error: Passwort fehlt für 'add'."
|
||||
exit 1
|
||||
fi
|
||||
echo "-> [DMS] Erstelle Postfach $EMAIL..."
|
||||
docker exec "$DMS_CONTAINER" setup email add "$EMAIL" "$PASSWORD"
|
||||
|
||||
elif [ "$COMMAND" == "del" ]; then
|
||||
echo "-> [DMS] Lösche Postfach $EMAIL..."
|
||||
docker exec "$DMS_CONTAINER" setup email del "$EMAIL"
|
||||
|
||||
elif [ "$COMMAND" == "sync" ]; then
|
||||
echo "-> [Sync] Starte manuelle Synchronisation..."
|
||||
else
|
||||
usage
|
||||
fi
|
||||
|
||||
# 2. Liste aller User dieser Domain aus DMS holen ("Source of Truth")
|
||||
echo "-> Lese aktuelle User-Liste aus DMS..."
|
||||
# 'setup email list' format: "* user@domain.com (0/0)" -> awk holt die Email
|
||||
RECIPIENTS_LIST=$(docker exec "$DMS_CONTAINER" setup email list | grep "@$DOMAIN" | awk '{print $2}' | sort)
|
||||
|
||||
# Prüfen ob User vorhanden sind
|
||||
if [ -z "$RECIPIENTS_LIST" ]; then
|
||||
echo "WARNUNG: Keine User für $DOMAIN im DMS gefunden!"
|
||||
echo "SES Rule wird NICHT aktualisiert, um Stillstand zu vermeiden."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Zählen (Limit Check)
|
||||
COUNT=$(echo "$RECIPIENTS_LIST" | wc -l)
|
||||
echo "-> Gefundene User: $COUNT"
|
||||
if [ "$COUNT" -gt 100 ]; then
|
||||
echo "CRITICAL ERROR: AWS SES erlaubt maximal 100 Empfänger pro Regel!"
|
||||
echo "Gefunden: $COUNT. Abbruch."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# JSON Array für AWS CLI bauen
|
||||
# Wir bauen: "user1@domain.com", "user2@domain.com", ...
|
||||
JSON_RECIPIENTS=$(echo "$RECIPIENTS_LIST" | jq -R . | jq -s .)
|
||||
|
||||
echo "-> Neue Empfänger-Liste für SES:"
|
||||
echo "$JSON_RECIPIENTS"
|
||||
|
||||
# 3. AWS SES Rule updaten
|
||||
echo "-> [AWS] Hole aktuelle Regel-Definition..."
|
||||
CURRENT_RULE=$(aws ses describe-receipt-rule \
|
||||
--rule-set-name "$RULE_SET_NAME" \
|
||||
--rule-name "$RULE_NAME" \
|
||||
--region "$AWS_REGION" \
|
||||
--output json)
|
||||
|
||||
# Wir müssen das JSON patchen. Wir ersetzen den "Recipients" Block.
|
||||
# jq Trick: .Rule.Recipients = $new_list | .Rule
|
||||
NEW_RULE_JSON=$(echo "$CURRENT_RULE" | jq --argjson recipients "$JSON_RECIPIENTS" '.Rule | .Recipients = $recipients')
|
||||
|
||||
# WICHTIG: TlsPolicy ist im Output oft lowercase, update erwartet CamelCase oder es ist tricky.
|
||||
# Wir bauen das Update Command sicherheitshalber explizit.
|
||||
|
||||
echo "-> [AWS] Sende Update an SES..."
|
||||
aws ses update-receipt-rule \
|
||||
--rule-set-name "$RULE_SET_NAME" \
|
||||
--rule-name "$RULE_NAME" \
|
||||
--rule "$NEW_RULE_JSON" \
|
||||
--region "$AWS_REGION"
|
||||
|
||||
echo "============================================================"
|
||||
echo "✅ Success! User angelegt/gelöscht und SES Rule aktualisiert."
|
||||
echo "============================================================"
|
||||
Loading…
Reference in New Issue