129 lines
2.6 KiB
TypeScript
129 lines
2.6 KiB
TypeScript
|
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;
|
||
|
}
|