diff --git a/email_api/email_api/app.py b/email_api/email_api/app.py index 49cca7e..b38e121 100644 --- a/email_api/email_api/app.py +++ b/email_api/email_api/app.py @@ -8,6 +8,7 @@ import os from dotenv import load_dotenv from email.parser import BytesParser from email.policy import default +from email.utils import getaddresses # Python-Version prüfen if sys.version_info < (3, 12): @@ -55,19 +56,51 @@ def process_email(domain): # E-Mail-Header parsen email_msg = BytesParser(policy=default).parsebytes(email_content) - from_addr = email_msg['From'] or 'lambda@andreasknuth.de' # Fallback - to_addr = email_msg['To'] - if not to_addr: - raise ValueError("Kein Empfänger (To) in der E-Mail gefunden") + + # From-Adresse extrahieren (konsistent mit Lambda) + from_headers = email_msg.get_all('from', []) + if from_headers: + from_addr = getaddresses(from_headers)[0][1] + else: + from_addr = 'lambda@andreasknuth.de' # Fallback + + # Empfänger aus allen relevanten Headern extrahieren (konsistent mit Lambda) + to_addrs = [addr for _name, addr in getaddresses(email_msg.get_all('to', []))] + cc_addrs = [addr for _name, addr in getaddresses(email_msg.get_all('cc', []))] + bcc_addrs = [addr for _name, addr in getaddresses(email_msg.get_all('bcc', []))] + recipients = to_addrs + cc_addrs + bcc_addrs + + # Debug-Ausgabe für Empfänger + logger.info(f"[{request_id}] To-Adressen: {to_addrs}") + logger.info(f"[{request_id}] CC-Adressen: {cc_addrs}") + logger.info(f"[{request_id}] BCC-Adressen: {bcc_addrs}") + logger.info(f"[{request_id}] Alle Empfänger: {recipients}") + + if not recipients: + # Zusätzliche Debug-Info + logger.error(f"[{request_id}] Verfügbare Header: {list(email_msg.keys())}") + logger.error(f"[{request_id}] To-Header roh: {email_msg.get('To')}") + logger.error(f"[{request_id}] CC-Header roh: {email_msg.get('Cc')}") + raise ValueError("Keine Empfänger (To/CC/BCC) in der E-Mail gefunden") - logger.info(f"[{request_id}] From: {from_addr}, To: {to_addr}") + logger.info(f"[{request_id}] From: {from_addr}, Recipients: {recipients}") - # An Postfix weiterleiten + # An Postfix weiterleiten - für jeden Empfänger einzeln with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as smtp: - smtp.sendmail(from_addr, to_addr, email_content) - logger.info(f"[{request_id}] Email forwarded to Postfix for {domain}") + smtp.mail(from_addr) + for recipient in recipients: + smtp.rcpt(recipient) + smtp.data(email_content) + + logger.info(f"[{request_id}] Email forwarded to Postfix for {domain} - {len(recipients)} recipients") - return jsonify({'message': 'Email processed', 'request_id': request_id}), 200 + return jsonify({ + 'message': 'Email processed', + 'request_id': request_id, + 'recipients_count': len(recipients), + 'recipients': recipients + }), 200 + except Exception as e: logger.error(f"[{request_id}] Error processing email: {str(e)}") return jsonify({'error': str(e), 'request_id': request_id}), 500