#!/usr/bin/env python3 """ Test Email Script — Service Finder ==================================== Tests the EmailManager by sending a test email using the configured provider. Reads all settings from .env automatically via the app's Settings class. Usage: # Test with configured provider (Brevo API / SMTP): docker compose exec sf_api python3 /app/test_email.py # Test with local Mailpit (no real email sent, no TLS needed): docker compose exec sf_api /bin/sh -c " \ SMTP_HOST=sf_mailpit SMTP_PORT=1025 SMTP_USER= SMTP_PASSWORD= \ EMAIL_PROVIDER=smtp TEST_RECIPIENT=kincses@gmail.com \ python3 /app/test_email.py" # Test with Brevo API directly: docker compose exec sf_api /bin/sh -c " \ EMAIL_PROVIDER=brevo_api TEST_RECIPIENT=kincses@gmail.com \ python3 /app/test_email.py" Environment check: - EMAIL_PROVIDER=smtp → uses SMTP - EMAIL_PROVIDER=brevo_smtp → uses Brevo SMTP relay - EMAIL_PROVIDER=brevo_api → uses Brevo REST API """ import os import sys import asyncio import logging # Ensure the backend package is importable sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) # ── Load .env but do NOT override already-set env vars ── from dotenv import load_dotenv env_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env') load_dotenv(env_path, override=False) # override=False = respect existing env vars # ── Logging setup ── logging.basicConfig( level=logging.INFO, format='%(asctime)s [%(name)s] %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', ) logger = logging.getLogger("TestEmail") async def main(): """Send a test email and report the result.""" print("=" * 70) print(" SERVICE FINDER — EMAIL TEST SCRIPT") print("=" * 70) # ── 1. Show current email configuration ── provider = os.getenv("EMAIL_PROVIDER", "smtp") print(f"\n📧 Current EMAIL_PROVIDER: {provider}") print(f" SMTP_HOST: {os.getenv('SMTP_HOST', '(not set)')}") print(f" SMTP_PORT: {os.getenv('SMTP_PORT', '(not set)')}") print(f" SMTP_USER: {os.getenv('SMTP_USER', '(not set)')}") print(f" MAIL_FROM: {os.getenv('MAIL_FROM', '(not set)')}") print(f" MAIL_FROM_NAME: {os.getenv('MAIL_FROM_NAME', '(not set)')}") # Brevo-specific checks brevo_api_key = os.getenv("BREVO_API_KEY") brevo_smtp_user = os.getenv("BREVO_SMTP_USER") brevo_smtp_pass = os.getenv("BREVO_SMTP_PASSWORD") if provider == "brevo_api": print(f" BREVO_API_KEY: {'✅ Set' if brevo_api_key else '❌ NOT SET'}") elif provider == "brevo_smtp": print(f" BREVO_SMTP_USER: {'✅ Set' if brevo_smtp_user else '❌ NOT SET'}") print(f" BREVO_SMTP_PASSWORD: {'✅ Set' if brevo_smtp_pass else '❌ NOT SET'}") # ── 2. Recipient ── recipient = os.getenv("TEST_RECIPIENT") or os.getenv("INITIAL_ADMIN_EMAIL") or "kincses@valami.hu" print(f"\n📨 Test recipient: {recipient}") # ── 3. Import and send ── print("\n⏳ Sending test email...\n") try: from app.services.email_manager import EmailManager result = await EmailManager.send_email( recipient=recipient, template_key="test", variables={ "first_name": "Teszt", "link": "https://dev.servicefinder.hu/dashboard", }, lang="hu", ) print(f"\n{'=' * 70}") print(f" 📬 EMAIL RESULT") print(f"{'=' * 70}") print(f" Status: {result.get('status', 'unknown')}") print(f" Provider: {result.get('provider', 'unknown')}") if result.get('message_id'): print(f" MessageID: {result['message_id']}") if result.get('message'): print(f" Message: {result['message']}") print(f"{'=' * 70}\n") if result.get("status") == "success": print("✅ TEST PASSED — Email sent successfully!") return 0 else: print(f"❌ TEST FAILED — {result.get('message', 'Unknown error')}") return 1 except Exception as e: print(f"\n❌ CRITICAL ERROR: {e}") import traceback traceback.print_exc() return 1 if __name__ == "__main__": exit_code = asyncio.run(main()) sys.exit(exit_code)