import * as plugins from '../plugins.js'; /** * Email processing modes */ export type EmailProcessingMode = 'forward' | 'mta' | 'process'; /** * Consolidated email configuration interface */ export interface IEmailConfig { // Email server settings ports: number[]; hostname: string; maxMessageSize?: number; // TLS configuration for email server tls?: { certPath?: string; keyPath?: string; caPath?: string; minVersion?: string; }; // Authentication for inbound connections auth?: { required?: boolean; methods?: ('PLAIN' | 'LOGIN' | 'OAUTH2')[]; users?: Array<{username: string, password: string}>; }; // Default routing for unmatched domains defaultMode: EmailProcessingMode; defaultServer?: string; defaultPort?: number; defaultTls?: boolean; // Domain rules with glob pattern support domainRules: IDomainRule[]; // Queue configuration for all email processing queue?: { storageType?: 'memory' | 'disk'; persistentPath?: string; maxRetries?: number; baseRetryDelay?: number; maxRetryDelay?: number; }; // Advanced MTA settings mtaGlobalOptions?: IMtaOptions; } /** * Domain rule interface for pattern-based routing */ export interface IDomainRule { // Domain pattern (e.g., "*@example.com", "*@*.example.net") pattern: string; // Handling mode for this pattern mode: EmailProcessingMode; // Forward mode configuration target?: { server: string; port?: number; useTls?: boolean; authentication?: { user?: string; pass?: string; }; }; // MTA mode configuration mtaOptions?: IMtaOptions; // Process mode configuration contentScanning?: boolean; scanners?: IContentScanner[]; transformations?: ITransformation[]; // Rate limits for this domain rateLimits?: { maxMessagesPerMinute?: number; maxRecipientsPerMessage?: number; }; } /** * MTA options interface */ export interface IMtaOptions { domain?: string; allowLocalDelivery?: boolean; localDeliveryPath?: string; dkimSign?: boolean; dkimOptions?: { domainName: string; keySelector: string; privateKey: string; }; smtpBanner?: string; maxConnections?: number; connTimeout?: number; spoolDir?: string; } /** * Content scanner interface */ export interface IContentScanner { type: 'spam' | 'virus' | 'attachment'; threshold?: number; action: 'tag' | 'reject'; blockedExtensions?: string[]; } /** * Transformation interface */ export interface ITransformation { type: string; header?: string; value?: string; domains?: string[]; append?: boolean; [key: string]: any; }