From 9ef67da70e1a6783f758dcec7dd746c2e5957b52 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Sun, 15 Jun 2025 22:35:12 -0500 Subject: [PATCH] domain_exists --- email_api/email_api/app.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/email_api/email_api/app.py b/email_api/email_api/app.py index bcd2955..7144e8d 100644 --- a/email_api/email_api/app.py +++ b/email_api/email_api/app.py @@ -38,8 +38,18 @@ SMTP_HOST = "localhost" SMTP_PORT = 25 API_TOKEN = os.environ.get('API_TOKEN') AWS_REGION = os.environ.get('AWS_REGION', 'us-east-1') +API_KEY = os.environ['MAILCOW_API_KEY'] s3_client = boto3.client('s3', region_name=AWS_REGION) +def domain_exists(domain): + url = f"{MAILCOW_API}/get/domain/all" + headers = {'X-API-Key': API_KEY} + resp = requests.get(url, headers=headers, timeout=5) + resp.raise_for_status() + domains = resp.json() + # domains ist eine Liste von Objekten mit key 'domain_name' + return any(d.get('domain_name') == domain for d in domains) + def mark_email_as_processed(bucket, key, status, processor='rest-api'): """Setzt processed-Metadaten auf einen beliebigen Status.""" try: @@ -162,6 +172,12 @@ def process_email(domain): if not recipients: return jsonify({'error': 'No recipients'}), 400 + # … im Handler vor dem Weiterleiten … + recipient_domains = {addr.split('@')[-1] for addr in to_addrs} + if not any(domain_exists(d) for d in recipient_domains): + print("Keine unserer Domains betroffen – skip.") + return {'statusCode': 200, 'body': 'Unknown domain'} + with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as smtp: smtp.sendmail(from_addr, recipients, email_bytes)