Files
mailgoserver/graphify-out/GRAPH_REPORT.md
T
2026-08-12 12:56:22 +01:00

18 KiB

Graph Report - . (2026-08-12)

Corpus Check

  • Corpus is ~39,032 words - fits in a single context window. You may not need a graph.

Summary

  • 426 nodes · 861 edges · 39 communities (33 shown, 6 thin omitted)
  • Extraction: 92% EXTRACTED · 8% INFERRED · 0% AMBIGUOUS · INFERRED: 71 edges (avg confidence: 0.62)
  • Token cost: 243,577 input · 0 output

Community Hubs (Navigation)

  • DKIM/SPF DNS Management UI
  • Web UI Database & Settings Utils
  • Admin Template Pages
  • App Bootstrap & Domain Models
  • DKIM Key Manager
  • SMTP Custom Protocol & Controllers
  • Sender/IP Authentication Logic
  • Models Core & Logging Utils
  • Email Relay Delivery
  • Unified App Entry Point
  • Dashboard & Auth Log Web UI
  • IP Whitelist Web UI
  • SMTP Handler Message Processing
  • Sender Management Web UI
  • Domain Management Web UI
  • README Unified: Structure & Deployment
  • README Unified & Requirements: SMTP/DB Deps
  • Manual Testing Docs (swaks/CLI)
  • Settings Loader & TLS Utils
  • DKIM/Custom Header Models
  • Combined Authenticators
  • CLI Usage & IP Whitelisting Docs
  • Message Viewer Web UI
  • DKIM/DNS Dependencies
  • README: License & Auth Features
  • systemd Install Script
  • Auth Order Fix Notes
  • Sender Model
  • send_email.py Test Script
  • SMTP Management JS (Frontend)
  • SMTP Handler Module & Message ID Util
  • Template Datetime Filter
  • Dashboard Route
  • nginx Setup Script
  • email_server Package Init
  • DKIM Management JS (Frontend)
  • Python Env Setup Script
  • bash_send_email Test Script
  • Hello.jpg Test Fixture (Doge Meme)

God Nodes (most connected - your core abstractions)

  1. DKIMManager - 34 edges
  2. load_settings() - 22 edges
  3. get_logger() - 21 edges
  4. Domain - 20 edges
  5. EmailLog - 20 edges
  6. SMTPServerApp - 19 edges
  7. EmailRelay - 17 edges
  8. Sender - 17 edges
  9. EnhancedCustomSMTPHandler - 17 edges
  10. Base Layout Template - 17 edges

Surprising Connections (you probably didn't know these)

  • PyMTA-server README --semantically_similar_to--> SMTP Server with Web Management Frontend README (legacy layout) [INFERRED] [semantically similar] README.md → README_unified.md
  • DKIM Support (auto key gen + signing) --conceptually_related_to--> DKIM Key Generation (manual test setup) [INFERRED] README_unified.md → tests/run_tests_manually.md
  • Lorem Ipsum Test Email Body --semantically_similar_to--> PDF Test Document (French Lipsum) [INFERRED] [semantically similar] tests/email_body.txt → tests/pdf_test_1.pdf
  • SMTPServerApp --uses--> DKIMManager [INFERRED] app.py → email_server/dkim_manager.py
  • SMTPServerApp --uses--> AuthLog [INFERRED] app.py → email_server/models.py

Import Cycles

  • None detected.

Hyperedges (group relationships)

  • Domain CRUD Flow — email_server_server_web_ui_templates_add_domain_page, email_server_server_web_ui_templates_domains_page, email_server_server_web_ui_templates_edit_domain_page, email_server_server_web_ui_templates_domains_domain_model [INFERRED 0.80]
  • DKIM/SPF DNS Verification Flow — email_server_server_web_ui_templates_dkim_page, email_server_server_web_ui_templates_edit_dkim_page, email_server_server_web_ui_templates_dkim_dkim_key_model, email_server_server_web_ui_templates_domains_domain_model [INFERRED 0.80]
  • Email Log Message Viewer Flow — email_server_server_web_ui_templates_logs_page, email_server_server_web_ui_templates_view_message_content_page, email_server_server_web_ui_templates_logs_email_log_model, email_server_server_web_ui_templates_view_message_content_attachment_model [INFERRED 0.80]
  • SMTP Authentication & IP Whitelist Flow — tests_note_authentication_order_fix_authentication_order_fix, tests_note_authentication_order_fix_ip_whitelisting_fallback, readme_unified_user_authentication, readme_unified_ip_whitelisting [INFERRED 0.85]
  • Manual SMTP Testing Workflow — tests_general_cli_usage_swaks, tests_run_tests_manually_swaks, tests_email_body_lorem_ipsum, tests_general_cli_usage_send_email_script [INFERRED 0.80]
  • DKIM Key Generation & DNS Verification Flow — readme_unified_dkim_support, readme_unified_dns_configuration, tests_general_cli_usage_dkim_key_management, tests_run_tests_manually_dkim_key_generation [INFERRED 0.85]

Communities (39 total, 6 thin omitted)

Community 0 - "DKIM/SPF DNS Management UI"

Cohesion: 0.11 Nodes (30): check_dkim_dns(), check_spf_dns(), create_dkim(), dkim_list(), edit_dkim(), route, DKIM blueprint for the SMTP server web UI. This module provides DKIM key…, Regenerate DKIM key for domain. (+22 more)

Community 1 - "Web UI Database & Settings Utils"

Cohesion: 0.10 Nodes (28): import_or_install_driver(), install_package(), Database utilities for the SMTP server., Install a Python package using pip. Args: package_name: Name of the package to…, Import database driver, installing it if necessary. Args: db_type: Type of…, Test if a database connection can be established. Args: url: Database…, test_database_connection(), allowed_file() (+20 more)

Community 2 - "Admin Template Pages"

Cohesion: 0.23 Nodes (27): Add Domain Page, Add IP Whitelist Page, Add Sender Page, check_health() Service Status Pattern, Base Layout Template, Dashboard Page, DKIM Key Data Model, DKIM Key Management Page (+19 more)

Community 3 - "App Bootstrap & Domain Models"

Cohesion: 0.15 Nodes (15): Initialize the database with sample data for testing, create_tables(), Domain, Check if this IP can send emails for the given domain. Args: domain_name: The…, Create all database tables using ESRV schema., Domain model with enhanced security features., IP whitelist model with domain-specific authentication. Security feature: - IPs…, WhitelistedIP (+7 more)

Community 4 - "DKIM Key Manager"

Cohesion: 0.12 Nodes (11): DKIMManager, Get the active DKIM key for a domain (only one active per selector)., Get DKIM private key for a domain., Get DKIM public key DNS record for a domain (active key only)., Sign email content with DKIM. Only add one DKIM header, after all modifications., Manages DKIM keys and email signing., Initialize DKIM keys for existing domains that don't have them., Initialize DKIMManager with a selector. If not provided, use random. (+3 more)

Community 5 - "SMTP Custom Protocol & Controllers"

Cohesion: 0.13 Nodes (11): AIOSMTP, Controller, EmailAttachment, Attachment metadata and file path, linked to EmailLog., CustomSMTP, PlainController, Custom SMTP class with configurable banner and secure AUTH handling., Override AUTH command to close connection after failed authentication. (+3 more)

Community 6 - "Sender/IP Authentication Logic"

Cohesion: 0.14 Nodes (15): get_authenticated_domain_id(), Enhanced authentication modules for the SMTP server using ESRV schema. Security…, Check if IP can authenticate for a specific domain. Args: ip_address: Client IP…, Validate if the authenticated entity can send as the specified from address.…, Get the domain ID for the authenticated entity. Args: session: SMTP session…, validate_sender_authorization(), check_password(), get_domain_by_name() (+7 more)

Community 7 - "Models Core & Logging Utils"

Cohesion: 0.16 Nodes (13): Email relay functionality for the SMTP server., EmailRecipientLog, log_email(), Database models for the SMTP server using ESRV schema. Enhanced security…, Log for each recipient of an email, including status and error details., Log an email send attempt. Args: from_address: Sender email to_address:…, ensure_folder_exists(), get_logger() (+5 more)

Community 8 - "Email Relay Delivery"

Cohesion: 0.15 Nodes (9): EmailRelay, Relay email to recipients' mail servers asynchronously with encryption.…, Handles relaying emails to recipient mail servers., Synchronous wrapper for relay_email_async for compatibility., Modify email headers to set To and Cc fields, preserving original structure for…, Log email activity to database, including per-recipient results., Prepare a copy of the email for a specific recipient without modifying original…, EmailLog (+1 more)

Community 9 - "Unified App Entry Point"

Cohesion: 0.18 Nodes (8): main(), Start the SMTP server in async context, Run the unified application, Check the health of all services, Unified SMTP Server and Web Frontend Application, Convert relative database URL to absolute path for Flask-SQLAlchemy, Create and configure the Flask application, SMTPServerApp

Community 10 - "Dashboard & Auth Log Web UI"

Cohesion: 0.19 Nodes (9): AuthLog, Authentication log model for security auditing., Dashboard routes for the SMTP server web UI. This module provides the main…, SMTP Server Web UI Package This package provides a web interface for managing…, logs(), route, Logs blueprint for the SMTP server web UI. This module provides email and…, Display email and authentication logs. (+1 more)

Community 11 - "IP Whitelist Web UI"

Cohesion: 0.20 Nodes (13): add_ip(), disable_ip(), edit_ip(), enable_ip(), ips_list(), route, IP Whitelist blueprint for the SMTP server web UI. This module provides IP…, Enable whitelisted IP. (+5 more)

Community 12 - "SMTP Handler Message Processing"

Cohesion: 0.18 Nodes (8): EnhancedCustomSMTPHandler, Ensure all required email headers are present and properly formatted., Handle incoming email data with improved header management and logging., Handle RCPT TO command - validate recipients., Handle MAIL FROM command with enhanced sender validation. Security Features: -…, Generate the storage path for attachments based on sender domain,…, Get the correct content type for a file, trying multiple methods., Enhanced custom SMTP handler with security controls.

Community 13 - "Sender Management Web UI"

Cohesion: 0.24 Nodes (12): hash_password(), Hash a password using bcrypt., add_sender(), delete_sender(), edit_sender(), enable_sender(), route, Senders blueprint for the SMTP server web UI. This module provides sender… (+4 more)

Community 14 - "Domain Management Web UI"

Cohesion: 0.24 Nodes (11): add_domain(), delete_domain(), domains_list(), edit_domain(), route, Domains blueprint for the SMTP server web UI. This module provides domain…, Toggle domain active status (Enable/Disable)., Permanently remove domain and all associated data. (+3 more)

Community 15 - "README Unified: Structure & Deployment"

Cohesion: 0.17 Nodes (12): REST API Endpoints (/health, /api/server/status, /api/server/restart), SMTP Server with Web Management Frontend README (legacy layout), Domain Management, Email Relay (forward to external servers), Project Structure (app.py, main.py, email_server/, email_frontend/), Nginx Reverse Proxy, settings.ini Configuration File, Systemd Service (production deployment) (+4 more)

Community 16 - "README Unified & Requirements: SMTP/DB Deps"

Cohesion: 0.20 Nodes (12): SQLite Database Schema (domains, users, whitelisted_ips, dkim_keys, email_logs, auth_logs, custom_headers), Full SMTP Server (send/receive with auth), aiosmtpd (dependency), aiosmtplib (dependency), Unified Requirements File, Flask-SQLAlchemy (dependency), Jinja2 (dependency), python-dotenv (dependency) (+4 more)

Community 17 - "Manual Testing Docs (swaks/CLI)"

Cohesion: 0.18 Nodes (11): Lorem Ipsum Test Email Body, tests/send_email.py script, swaks (SMTP test CLI tool), PDF Test Document (French Lipsum), Beach Pebbles Photo (embedded image), Check DB Logs (sqlite3 email_logs query), DKIM Key Generation (manual test setup), Manual Test Setup Instructions (+3 more)

Community 18 - "Settings Loader & TLS Utils"

Cohesion: 0.31 Nodes (8): ConfigParser, generate_settings_ini(), load_settings(), Settings loader for the SMTP server. Automatically generates settings.ini with…, Generate settings.ini with default values and comments if it does not exist., Load settings from settings.ini, generating it if needed., TLS utilities for the SMTP server., Path

Community 19 - "DKIM/Custom Header Models"

Cohesion: 0.25 Nodes (6): Base, DKIM key management and email signing functionality., CustomHeader, DKIMKey, DKIM key model for email signing., Custom header model for domain-specific email headers.

Community 20 - "Combined Authenticators"

Cohesion: 0.33 Nodes (6): EnhancedAuthenticator, EnhancedIPAuthenticator, Enhanced username/password authenticator with sender validation. Features: -…, Enhanced IP-based authenticator with domain-specific authorization. Features: -…, EnhancedCombinedAuthenticator, Enhanced combined authenticator with sender validation support. Features: -…

Community 21 - "CLI Usage & IP Whitelisting Docs"

Cohesion: 0.22 Nodes (9): Sender IP Whitelisting, IP Whitelisting (auth-free sending), Direct sqlite3 DB Access/Queries, CLI/Web Usage Guide (tests), Domain Management (web UI: /email/domains), IP Whitelist Management (web UI: /email/ips), User Management (web UI: /email/users), Web Interface Setup Workflow (dev/prod) (+1 more)

Community 22 - "Message Viewer Web UI"

Cohesion: 0.38 Nodes (6): delete_attachment(), download_attachment(), route, Route to view full email message content if stored., View the full message content for an email log if stored., view_message_content()

Community 23 - "DKIM/DNS Dependencies"

Cohesion: 0.29 Nodes (7): DKIM (planned feature), DKIM Support (auto key gen + signing), DNS Configuration (DKIM/SPF/MX records), cryptography (dependency), dkimpy (dependency), dnspython (dependency), DKIM Key Management (web UI: /email/dkim)

Community 24 - "README: License & Auth Features"

Cohesion: 0.29 Nodes (7): PyMTA-server README, AGPL-3.0 License, SPF DNS Records (delivery success), Optional Storing of Sent Emails, MIT License, Username/Password Authentication, gunicorn (dependency)

Community 25 - "systemd Install Script"

Cohesion: 0.52 Nodes (6): remove_system_services(), remove_user_services(), script_install_service.sh script, usage(), write_system_services(), write_user_services()

Community 26 - "Auth Order Fix Notes"

Cohesion: 0.33 Nodes (6): Per-user/per-domain User Authentication, bcrypt (dependency), AuthResult / email_server/auth.py call (code snippet), AUTH Advertised on Both Plain SMTP and TLS Ports, SMTP Authentication Order Fix (June 2025), STARTTLS Not Advertised (direct TLS only)

Community 27 - "Sender Model"

Cohesion: 0.40 Nodes (3): Sender model with enhanced authentication controls. Security features: -…, Check if this sender can send emails as the given from_address. Args:…, Sender

Community 28 - "send_email.py Test Script"

Cohesion: 0.40 Nodes (4): Send a test email using plain SMTP., Send a test email using STARTTLS., send_test_email(), send_test_email_tls()

Community 29 - "SMTP Management JS (Frontend)"

Cohesion: 0.50 Nodes (3): DNSVerification, FormValidation, SMTPManagement

Community 30 - "SMTP Handler Module & Message ID Util"

Cohesion: 0.50 Nodes (3): Enhanced SMTP handler for processing incoming emails with security controls.…, generate_message_id(), Generate a consistent Message-ID for both email headers and database storage.…

Community 31 - "Template Datetime Filter"

Cohesion: 0.67 Nodes (3): app_template_filter, format_datetime(), Format datetime with the correct timezone from settings or argument.

Community 32 - "Dashboard Route"

Cohesion: 0.67 Nodes (3): dashboard(), route, Main dashboard showing overview of the email server.

Ambiguous Edges - Review These

  • Edit Domain PageSidebar Navigation Partial [AMBIGUOUS] email_server/server_web_ui/templates/edit_domain.html · relation: references
  • AGPL-3.0 LicenseMIT License [AMBIGUOUS] README.md · relation: conceptually_related_to

Knowledge Gaps

  • 36 isolated node(s): DKIMManagement, SMTPManagement, DNSVerification, FormValidation, script_nginx_setup.sh script (+31 more) These have ≤1 connection - possible missing edges or undocumented components.
  • 6 thin communities (<3 nodes) omitted from report — run graphify query to explore isolated nodes.

Suggested Questions

Questions this graph is uniquely positioned to answer:

  • What is the exact relationship between Edit Domain Page and Sidebar Navigation Partial? Edge tagged AMBIGUOUS (relation: references) - confidence is low.
  • What is the exact relationship between AGPL-3.0 License and MIT License? Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low.
  • Why does DKIMManager connect DKIM Key Manager to DKIM/SPF DNS Management UI, App Bootstrap & Domain Models, SMTP Custom Protocol & Controllers, Unified App Entry Point, SMTP Handler Message Processing, Domain Management Web UI, DKIM/Custom Header Models, Combined Authenticators, SMTP Handler Module & Message ID Util? High betweenness centrality (0.098) - this node is a cross-community bridge.
  • Why does load_settings() connect Settings Loader & TLS Utils to DKIM/SPF DNS Management UI, Web UI Database & Settings Utils, App Bootstrap & Domain Models, Models Core & Logging Utils, Unified App Entry Point, Dashboard & Auth Log Web UI, DKIM/Custom Header Models, SMTP Handler Module & Message ID Util, Template Datetime Filter? High betweenness centrality (0.041) - this node is a cross-community bridge.
  • Why does EmailRelay connect Email Relay Delivery to SMTP Custom Protocol & Controllers, Models Core & Logging Utils, SMTP Handler Message Processing, Combined Authenticators, SMTP Handler Module & Message ID Util? High betweenness centrality (0.036) - this node is a cross-community bridge.
  • Are the 9 inferred relationships involving DKIMManager (e.g. with SMTPServerApp and CustomHeader) actually correct? DKIMManager has 9 INFERRED edges - model-reasoned connections that need verification.
  • Are the 4 inferred relationships involving Domain (e.g. with SMTPServerApp and EnhancedAuthenticator) actually correct? Domain has 4 INFERRED edges - model-reasoned connections that need verification.