updated layout - make server as package
This commit is contained in:
9
email_server/__init__.py
Normal file
9
email_server/__init__.py
Normal file
@@ -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 *
|
||||||
@@ -5,7 +5,7 @@ Authentication modules for the SMTP server.
|
|||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from aiosmtpd.smtp import AuthResult, LoginPassword
|
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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ Command-line tools for managing the SMTP server.
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import sys
|
import sys
|
||||||
from models import Session, Domain, User, WhitelistedIP, hash_password, create_tables
|
from .models import Session, Domain, User, WhitelistedIP, hash_password, create_tables
|
||||||
from dkim_manager import DKIMManager
|
from .dkim_manager import DKIMManager
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import dkim
|
|||||||
from cryptography.hazmat.primitives import serialization, hashes
|
from cryptography.hazmat.primitives import serialization, hashes
|
||||||
from cryptography.hazmat.primitives.asymmetric import rsa
|
from cryptography.hazmat.primitives.asymmetric import rsa
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from models import Session, Domain, DKIMKey
|
from .models import Session, Domain, DKIMKey
|
||||||
from config import DKIM_SELECTOR, DKIM_KEY_SIZE
|
from .config import DKIM_SELECTOR, DKIM_KEY_SIZE
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import dns.resolver
|
|||||||
import smtplib
|
import smtplib
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from models import Session, EmailLog
|
from .models import Session, EmailLog
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from sqlalchemy import create_engine, Column, Integer, String, DateTime, Text, B
|
|||||||
from sqlalchemy.orm import declarative_base, sessionmaker
|
from sqlalchemy.orm import declarative_base, sessionmaker
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import bcrypt
|
import bcrypt
|
||||||
from config import DATABASE_URL
|
from .config import DATABASE_URL
|
||||||
|
|
||||||
# SQLAlchemy setup
|
# SQLAlchemy setup
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ import sys
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
# Import our modules
|
# Import our modules
|
||||||
from config import SMTP_PORT, SMTP_TLS_PORT, HOSTNAME, LOG_LEVEL
|
from .config import SMTP_PORT, SMTP_TLS_PORT, HOSTNAME, LOG_LEVEL
|
||||||
from models import create_tables
|
from .models import create_tables
|
||||||
from smtp_handler import CustomSMTPHandler, PlainController
|
from .smtp_handler import CustomSMTPHandler, PlainController
|
||||||
from tls_utils import generate_self_signed_cert, create_ssl_context
|
from .tls_utils import generate_self_signed_cert, create_ssl_context
|
||||||
from dkim_manager import DKIMManager
|
from .dkim_manager import DKIMManager
|
||||||
from aiosmtpd.controller import Controller
|
from aiosmtpd.controller import Controller
|
||||||
from aiosmtpd.smtp import SMTP as AIOSMTP
|
from aiosmtpd.smtp import SMTP as AIOSMTP
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ except RuntimeError:
|
|||||||
# No running loop, set debug when we create one
|
# No running loop, set debug when we create one
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def main():
|
async def start_server():
|
||||||
"""Main server function."""
|
"""Main server function."""
|
||||||
logger.info("Starting SMTP Server with DKIM support...")
|
logger.info("Starting SMTP Server with DKIM support...")
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ async def main():
|
|||||||
dkim_manager.initialize_default_keys()
|
dkim_manager.initialize_default_keys()
|
||||||
|
|
||||||
# Add test data if needed
|
# 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()
|
session = Session()
|
||||||
try:
|
try:
|
||||||
# Add example.com domain if not exists
|
# Add example.com domain if not exists
|
||||||
@@ -148,7 +148,7 @@ async def main():
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
try:
|
try:
|
||||||
asyncio.run(main())
|
asyncio.run(start_server())
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
logger.info('Server interrupted by user')
|
logger.info('Server interrupted by user')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
@@ -7,9 +7,9 @@ import uuid
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from aiosmtpd.smtp import SMTP as AIOSMTP, AuthResult
|
from aiosmtpd.smtp import SMTP as AIOSMTP, AuthResult
|
||||||
from aiosmtpd.controller import Controller
|
from aiosmtpd.controller import Controller
|
||||||
from auth import Authenticator, IPAuthenticator
|
from .auth import Authenticator, IPAuthenticator
|
||||||
from email_relay import EmailRelay
|
from .email_relay import EmailRelay
|
||||||
from dkim_manager import DKIMManager
|
from .dkim_manager import DKIMManager
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import ssl
|
|||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
from OpenSSL import crypto
|
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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
13
start_server.py
Normal file
13
start_server.py
Normal file
@@ -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)
|
||||||
Reference in New Issue
Block a user