diff --git a/email_server/__init__.py b/email_server/__init__.py new file mode 100644 index 0000000..2322bab --- /dev/null +++ b/email_server/__init__.py @@ -0,0 +1,9 @@ +from .auth import * +from .dkim_manager import * +from .server_runner import * +from .tls_utils import * +from .cli_tools import * +from .email_relay import * +from .models import * +from .smtp_handler import * +from .config import * \ No newline at end of file diff --git a/email_server/auth.py b/email_server/auth.py index f4e48b0..67b713c 100644 --- a/email_server/auth.py +++ b/email_server/auth.py @@ -5,7 +5,7 @@ Authentication modules for the SMTP server. import logging from datetime import datetime from aiosmtpd.smtp import AuthResult, LoginPassword -from models import Session, User, Domain, WhitelistedIP, AuthLog, check_password +from .models import Session, User, Domain, WhitelistedIP, AuthLog, check_password logger = logging.getLogger(__name__) diff --git a/email_server/cli_tools.py b/email_server/cli_tools.py index b23dbba..04c0807 100644 --- a/email_server/cli_tools.py +++ b/email_server/cli_tools.py @@ -4,8 +4,8 @@ Command-line tools for managing the SMTP server. import argparse import sys -from models import Session, Domain, User, WhitelistedIP, hash_password, create_tables -from dkim_manager import DKIMManager +from .models import Session, Domain, User, WhitelistedIP, hash_password, create_tables +from .dkim_manager import DKIMManager import logging logging.basicConfig(level=logging.INFO) diff --git a/email_server/dkim_manager.py b/email_server/dkim_manager.py index 8e58fec..cdd08f8 100644 --- a/email_server/dkim_manager.py +++ b/email_server/dkim_manager.py @@ -7,8 +7,8 @@ import dkim from cryptography.hazmat.primitives import serialization, hashes from cryptography.hazmat.primitives.asymmetric import rsa from datetime import datetime -from models import Session, Domain, DKIMKey -from config import DKIM_SELECTOR, DKIM_KEY_SIZE +from .models import Session, Domain, DKIMKey +from .config import DKIM_SELECTOR, DKIM_KEY_SIZE logger = logging.getLogger(__name__) diff --git a/email_server/email_relay.py b/email_server/email_relay.py index fa953d5..ceedaca 100644 --- a/email_server/email_relay.py +++ b/email_server/email_relay.py @@ -6,7 +6,7 @@ import dns.resolver import smtplib import logging from datetime import datetime -from models import Session, EmailLog +from .models import Session, EmailLog logger = logging.getLogger(__name__) diff --git a/email_server/models.py b/email_server/models.py index 1beee52..0141595 100644 --- a/email_server/models.py +++ b/email_server/models.py @@ -6,7 +6,7 @@ from sqlalchemy import create_engine, Column, Integer, String, DateTime, Text, B from sqlalchemy.orm import declarative_base, sessionmaker from datetime import datetime import bcrypt -from config import DATABASE_URL +from .config import DATABASE_URL # SQLAlchemy setup Base = declarative_base() diff --git a/email_server/main.py b/email_server/server_runner.py similarity index 92% rename from email_server/main.py rename to email_server/server_runner.py index b92f65d..226de36 100644 --- a/email_server/main.py +++ b/email_server/server_runner.py @@ -9,11 +9,11 @@ import sys import os # Import our modules -from config import SMTP_PORT, SMTP_TLS_PORT, HOSTNAME, LOG_LEVEL -from models import create_tables -from smtp_handler import CustomSMTPHandler, PlainController -from tls_utils import generate_self_signed_cert, create_ssl_context -from dkim_manager import DKIMManager +from .config import SMTP_PORT, SMTP_TLS_PORT, HOSTNAME, LOG_LEVEL +from .models import create_tables +from .smtp_handler import CustomSMTPHandler, PlainController +from .tls_utils import generate_self_signed_cert, create_ssl_context +from .dkim_manager import DKIMManager from aiosmtpd.controller import Controller from aiosmtpd.smtp import SMTP as AIOSMTP @@ -32,7 +32,7 @@ except RuntimeError: # No running loop, set debug when we create one pass -async def main(): +async def start_server(): """Main server function.""" logger.info("Starting SMTP Server with DKIM support...") @@ -46,7 +46,7 @@ async def main(): dkim_manager.initialize_default_keys() # Add test data if needed - from models import Session, Domain, User, WhitelistedIP, hash_password + from .models import Session, Domain, User, WhitelistedIP, hash_password session = Session() try: # Add example.com domain if not exists @@ -148,7 +148,7 @@ async def main(): if __name__ == '__main__': try: - asyncio.run(main()) + asyncio.run(start_server()) except KeyboardInterrupt: logger.info('Server interrupted by user') sys.exit(0) diff --git a/email_server/smtp_handler.py b/email_server/smtp_handler.py index 3b0f0c4..49c7c98 100644 --- a/email_server/smtp_handler.py +++ b/email_server/smtp_handler.py @@ -7,9 +7,9 @@ import uuid from datetime import datetime from aiosmtpd.smtp import SMTP as AIOSMTP, AuthResult from aiosmtpd.controller import Controller -from auth import Authenticator, IPAuthenticator -from email_relay import EmailRelay -from dkim_manager import DKIMManager +from .auth import Authenticator, IPAuthenticator +from .email_relay import EmailRelay +from .dkim_manager import DKIMManager logger = logging.getLogger(__name__) diff --git a/email_server/tls_utils.py b/email_server/tls_utils.py index cd1ad8c..219e9b6 100644 --- a/email_server/tls_utils.py +++ b/email_server/tls_utils.py @@ -6,7 +6,7 @@ import ssl import os import logging from OpenSSL import crypto -from config import TLS_CERT_FILE, TLS_KEY_FILE +from .config import TLS_CERT_FILE, TLS_KEY_FILE logger = logging.getLogger(__name__) diff --git a/start_server.py b/start_server.py new file mode 100644 index 0000000..608128c --- /dev/null +++ b/start_server.py @@ -0,0 +1,13 @@ +from email_server import start_server, logger +import asyncio +import sys + +if __name__ == '__main__': + try: + asyncio.run(start_server()) + except KeyboardInterrupt: + logger.info('Server interrupted by user') + sys.exit(0) + except Exception as e: + logger.error(f'Server error: {e}') + sys.exit(1) \ No newline at end of file