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" "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 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""" """Verarbeitet eine einzelne Domain"""
bucket = domain_config["bucket"] bucket = domain_config["bucket"]
prefix = domain_config["prefix"] prefix = domain_config["prefix"]
@ -344,28 +344,34 @@ def process_domain(domain_name, domain_config, last_sync):
} }
# Alle Domains-Konfigurationen für die Validierung verwenden # 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: if is_valid:
logger.info(f"Gültige E-Mail für: {to_address}") logger.info(f"Gültige E-Mail für: {to_address}")
# E-Mail speichern # Nur speichern, wenn die E-Mail zur aktuellen Domain gehört
if store_email(email_content, to_address, message_id, key, MAIL_DIR): if recipient_domain == domain_name:
# Status aktualisieren # E-Mail speichern
last_sync[sync_key] = { if store_email(email_content, to_address, message_id, key, MAIL_DIR):
'timestamp': time.time(), # Status aktualisieren
'to': to_address, last_sync[sync_key] = {
'message_id': message_id, 'timestamp': time.time(),
'domain': domain_name, 'to': to_address,
'bucket': bucket 'message_id': message_id,
} 'domain': domain_name,
new_emails += 1 'bucket': bucket
logger.info(f"E-Mail {key} erfolgreich synchronisiert ({new_emails})") }
new_emails += 1
logger.info(f"E-Mail {key} erfolgreich synchronisiert ({new_emails})")
# Status nach jeweils 10 E-Mails speichern # Status nach jeweils 10 E-Mails speichern
if new_emails % 10 == 0: if new_emails % 10 == 0:
save_sync_status(last_sync) save_sync_status(last_sync)
logger.info(f"Zwischenspeicherung: {new_emails} neue E-Mails bisher") 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: else:
logger.info(f"Ungültige Empfängeradresse: {to_address} für {key}") logger.info(f"Ungültige Empfängeradresse: {to_address} für {key}")
emails_to_delete.append(key) emails_to_delete.append(key)
@ -415,7 +421,8 @@ def main():
total_all_emails = 0 total_all_emails = 0
for domain_name, domain_config in domains_config.items(): 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_new_emails += new_emails
total_all_emails += all_emails total_all_emails += all_emails