BugFix downloader, add IAM User to send EMails for a specific Domain

This commit is contained in:
Andreas Knuth 2025-03-20 23:06:51 +01:00
parent 67e37f8985
commit 9905481e26
2 changed files with 71 additions and 21 deletions

View File

@ -106,3 +106,46 @@ aws ses create-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{
}],
"TlsPolicy": "Require"
}'
USER_NAME="${DOMAIN_NAME//./-}-ses-user" # Ersetzt Punkte durch Bindestriche für validen IAM-Username
# 1. IAM-User erstellen
echo "Erstelle IAM-User: $USER_NAME"
aws iam create-user --user-name $USER_NAME
# 2. Policy-Dokument für SES-Vollzugriff erstellen
POLICY_DOCUMENT='{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ses:*"
],
"Resource": "*"
}
]
}'
# 3. Option 1: Managed Policy AmazonSESFullAccess anhängen
echo "Hänge AmazonSESFullAccess Policy an"
aws iam attach-user-policy \
--user-name $USER_NAME \
--policy-arn arn:aws:iam::aws:policy/AmazonSESFullAccess
# 4. Access Key und Secret Key für den User erstellen
echo "Erstelle Access Key für den User: $USER_NAME"
KEY_OUTPUT=$(aws iam create-access-key --user-name $USER_NAME)
# 5. Keys ausgeben (am besten in eine sichere Datei speichern)
echo "Zugriffsschlüssel wurden erstellt. Bitte sicher aufbewahren:"
echo "$KEY_OUTPUT" | jq .
# Optional: Keys in separaten Variablen speichern für weitere Verwendung
ACCESS_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.AccessKeyId)
SECRET_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.SecretAccessKey)
echo "ACCESS_KEY: $ACCESS_KEY"
echo "SECRET_KEY: $SECRET_KEY"
echo "WICHTIG: Speichere den Secret Key jetzt, da er später nicht mehr abgerufen werden kann!"

View File

@ -274,7 +274,7 @@ def delete_s3_emails(s3_client, bucket, emails_to_delete, email_info):
return deleted_count
def process_domain(domain_name, domain_config, last_sync):
def process_domain(domain_name, domain_config, last_sync, all_domains_config):
"""Verarbeitet eine einzelne Domain"""
bucket = domain_config["bucket"]
prefix = domain_config["prefix"]
@ -344,11 +344,14 @@ def process_domain(domain_name, domain_config, last_sync):
}
# Alle Domains-Konfigurationen für die Validierung verwenden
is_valid, recipient_domain = is_valid_recipient(to_address, {domain_name: domain_config})
# BUGFIX: Hier prüfen wir gegen ALLE konfigurierten Domains
is_valid, recipient_domain = is_valid_recipient(to_address, all_domains_config)
if is_valid:
logger.info(f"Gültige E-Mail für: {to_address}")
# Nur speichern, wenn die E-Mail zur aktuellen Domain gehört
if recipient_domain == domain_name:
# E-Mail speichern
if store_email(email_content, to_address, message_id, key, MAIL_DIR):
# Status aktualisieren
@ -366,6 +369,9 @@ def process_domain(domain_name, domain_config, last_sync):
if new_emails % 10 == 0:
save_sync_status(last_sync)
logger.info(f"Zwischenspeicherung: {new_emails} neue E-Mails bisher")
else:
# Gültige E-Mail, aber für eine andere Domain - nicht löschen!
logger.info(f"E-Mail {key} ist für Domain {recipient_domain}, wird übersprungen (nicht gelöscht)")
else:
logger.info(f"Ungültige Empfängeradresse: {to_address} für {key}")
emails_to_delete.append(key)
@ -415,7 +421,8 @@ def main():
total_all_emails = 0
for domain_name, domain_config in domains_config.items():
new_emails, all_emails = process_domain(domain_name, domain_config, last_sync)
# BUGFIX: all_domains_config übergeben statt nur der aktuellen Domain-Konfiguration
new_emails, all_emails = process_domain(domain_name, domain_config, last_sync, domains_config)
total_new_emails += new_emails
total_all_emails += all_emails