# DCRouter Email Configuration Example This document provides a comprehensive example of configuring the UnifiedEmailServer in DCRouter for various email routing scenarios. ## Basic Configuration Here's a complete example of a email configuration for the UnifiedEmailServer: ```typescript import { IEmailConfig, EmailProcessingMode, IDomainRule } from './ts/config/email.config.js'; const emailConfig: IEmailConfig = { // Basic server settings useEmail: true, behindSmartProxy: false, hostname: "mail.example.com", ports: [25, 587, 465], // Default processing settings defaultMode: "forward" as EmailProcessingMode, defaultServer: "smtp.internal-relay.example.com", defaultPort: 25, defaultTls: true, // TLS configuration tls: { certPath: "/path/to/tls/certificate.pem", keyPath: "/path/to/tls/key.pem", caPath: "/path/to/tls/ca.pem", minVersion: "TLSv1.2", ciphers: "HIGH:!aNULL:!MD5:!RC4" }, // Email size and connection limits maxMessageSize: 25 * 1024 * 1024, // 25MB // Authentication settings auth: { required: true, methods: ["PLAIN", "LOGIN"], users: [ { username: "user1", password: "securepassword1" }, { username: "user2", password: "securepassword2" } ] }, // Domain routing rules domainRules: [ // Process emails for your primary domain via MTA { pattern: "*@example.com", mode: "mta" as EmailProcessingMode, mtaOptions: { domain: "example.com", dkimSign: true, dkimOptions: { domainName: "example.com", keySelector: "mail" } } }, // Forward support emails to help desk { pattern: "*@support.example.com", mode: "forward" as EmailProcessingMode, target: { server: "helpdesk.example.com", port: 25, useTls: true } }, // Scan marketing emails for content and attachments { pattern: "*@marketing.example.com", mode: "process" as EmailProcessingMode, contentScanning: true, scanners: [ { type: "attachment", action: "reject", blockedExtensions: [".exe", ".zip", ".js", ".vbs", ".bat"] }, { type: "spam", threshold: 5.0, action: "tag" } ], transformations: [ { type: "addHeader", header: "X-Scanned-By", value: "DCRouter Content Scanner" } ] }, // Forward all other emails to a backup server { pattern: "*@*", mode: "forward" as EmailProcessingMode, target: { server: "backup-smtp.example.com", port: 587, useTls: true } } ], // Queue configuration queue: { storageType: "memory", ttl: 86400000, // 24 hours maxItems: 10000, checkInterval: 60000 // 1 minute }, // Template configuration templateConfig: { from: "noreply@example.com", replyTo: "support@example.com", footerHtml: "

This is an automated message from Example Inc.

", footerText: "This is an automated message from Example Inc." }, // IP warmup configuration serverConfig: { delivery: { concurrency: 10, rateLimit: { rate: 100, interval: 60000 // 1 minute }, retries: { max: 3, delay: 300000, // 5 minutes useBackoff: true } }, security: { useDkim: true, verifyDkim: true, verifySpf: true, verifyDmarc: true, enforceDmarc: true, useTls: true, requireValidCerts: true, securityLogLevel: "info", checkIPReputation: true, scanContent: true, maliciousContentAction: "tag", threatScoreThreshold: 7.0 } } }; ``` ## Initializing the UnifiedEmailServer Here's how to initialize the UnifiedEmailServer with the configuration: ```typescript import { UnifiedEmailServer, IUnifiedEmailServerOptions } from './ts/mail/routing/classes.unified.email.server.js'; // Convert EmailConfig to UnifiedEmailServerOptions const serverOptions: IUnifiedEmailServerOptions = { ports: emailConfig.ports || [25], hostname: emailConfig.hostname || 'localhost', banner: `${emailConfig.hostname} ESMTP DCRouter`, // Authentication auth: emailConfig.auth, // TLS tls: emailConfig.tls, // Message limits maxMessageSize: emailConfig.maxMessageSize || 10 * 1024 * 1024, // 10MB default maxClients: 100, // Domain routing domainRules: emailConfig.domainRules || [], defaultMode: emailConfig.defaultMode || 'forward', defaultServer: emailConfig.defaultServer, defaultPort: emailConfig.defaultPort, defaultTls: emailConfig.defaultTls, // Deliverability options ipWarmupConfig: { enabled: true, ipAddresses: ['198.51.100.1', '198.51.100.2', '198.51.100.3'], targetDomains: ['gmail.com', 'yahoo.com', 'outlook.com'], allocationPolicy: 'balanced' }, reputationMonitorConfig: { enabled: true, domains: ['example.com', 'marketing.example.com'], alertThresholds: { bounceRate: 0.05, // 5% complaintRate: 0.001 // 0.1% } } }; // Create and start the server const emailServer = new UnifiedEmailServer(serverOptions); emailServer.start().then(() => { console.log('UnifiedEmailServer started successfully'); }).catch((error) => { console.error('Failed to start UnifiedEmailServer:', error); }); ``` ## Use Case Examples ### 1. Forwarding Email Gateway (SMTP Proxy) Configure DCRouter to forward emails for specific domains to internal mail servers: ```typescript const forwardingRules: IDomainRule[] = [ // Main corporate domain - forward to Exchange { pattern: "*@corp.example.com", mode: "forward" as EmailProcessingMode, target: { server: "exchange.internal", port: 25, useTls: true } }, // Marketing domain - forward to Marketing mail server { pattern: "*@marketing.example.com", mode: "forward" as EmailProcessingMode, target: { server: "marketing-mail.internal", port: 25, useTls: false } } ]; ``` ### 2. Outbound MTA with DKIM Signing and IP Warmup Configure DCRouter as an outbound mail transfer agent with DKIM signing and IP warmup: ```typescript // MTA configuration with DKIM signing const mtaRule: IDomainRule = { pattern: "*@outbound.example.com", mode: "mta" as EmailProcessingMode, mtaOptions: { domain: "outbound.example.com", dkimSign: true, dkimOptions: { domainName: "outbound.example.com", keySelector: "mail2023" } } }; // IP Warmup configuration const ipWarmupConfig = { enabled: true, ipAddresses: ['203.0.113.1', '203.0.113.2'], targetDomains: ['gmail.com', 'yahoo.com', 'hotmail.com', 'aol.com'], allocationPolicy: 'progressive', fallbackPercentage: 20 }; ``` ### 3. Content Scanning and Security Gateway Configure DCRouter to scan emails for malicious content and enforce security policies: ```typescript const securityRule: IDomainRule = { pattern: "*@*", mode: "process" as EmailProcessingMode, contentScanning: true, scanners: [ // Scan for malicious attachments { type: "attachment", action: "reject", blockedExtensions: [".exe", ".dll", ".bat", ".vbs", ".js", ".cmd", ".scr", ".com", ".pif"] }, // Scan for spam { type: "spam", threshold: 6.0, action: "tag" }, // Scan for viruses { type: "virus", action: "reject" } ], transformations: [ // Add scanning headers { type: "addHeader", header: "X-Security-Scanned", value: "DCRouter Security Gateway" } ] }; // Configure security settings const securityConfig = { useDkim: true, verifyDkim: true, verifySpf: true, verifyDmarc: true, enforceDmarc: true, checkIPReputation: true, scanContent: true, maliciousContentAction: "quarantine", threatScoreThreshold: 5.0, rejectHighRiskIPs: true, securityLogLevel: "warn" }; ``` ### 4. Multi-Tenant Email Server Configure DCRouter to handle emails for multiple domains with different processing rules: ```typescript const multiTenantRules: IDomainRule[] = [ // Tenant 1: Process locally { pattern: "*@tenant1.example.org", mode: "mta" as EmailProcessingMode, mtaOptions: { domain: "tenant1.example.org", dkimSign: true, dkimOptions: { domainName: "tenant1.example.org", keySelector: "t1mail" } } }, // Tenant 2: Forward to their server { pattern: "*@tenant2.example.org", mode: "forward" as EmailProcessingMode, target: { server: "mail.tenant2.com", port: 587, useTls: true } }, // Tenant 3: Process with content scanning { pattern: "*@tenant3.example.org", mode: "process" as EmailProcessingMode, contentScanning: true, scanners: [ { type: "attachment", action: "tag", blockedExtensions: [".zip", ".rar", ".7z"] } ] } ]; ``` ## Using the Bounce Management System DCRouter includes a sophisticated bounce management system. Here's how to use it: ```typescript // Get an instance of the UnifiedEmailServer const emailServer = new UnifiedEmailServer(serverOptions); // Check if an email is on the suppression list const isSuppressed = emailServer.isEmailSuppressed('user@example.com'); // Get suppression information const suppressionInfo = emailServer.getSuppressionInfo('user@example.com'); if (suppressionInfo) { console.log(`Suppressed due to: ${suppressionInfo.reason}`); console.log(`Suppressed since: ${new Date(suppressionInfo.timestamp)}`); if (suppressionInfo.expiresAt) { console.log(`Suppression expires: ${new Date(suppressionInfo.expiresAt)}`); } else { console.log('Suppression is permanent'); } } // Add an email to the suppression list emailServer.addToSuppressionList( 'problem-user@example.com', 'Manual suppression due to user request', Date.now() + (30 * 24 * 60 * 60 * 1000) // Expires in 30 days ); // Remove an email from the suppression list emailServer.removeFromSuppressionList('reactivated-user@example.com'); // Get all suppressed emails const suppressionList = emailServer.getSuppressionList(); console.log(`There are ${suppressionList.length} suppressed email addresses`); ``` ## Using the IP Warmup System DCRouter's IP warmup system helps gradually build sender reputation for new IP addresses: ```typescript // Add a new IP to warmup emailServer.addIPToWarmup('198.51.100.4'); // Get warmup status for all IPs const warmupStatus = emailServer.getIPWarmupStatus(); console.log('IP Warmup Status:', warmupStatus); // Get warmup status for a specific IP const specificIPStatus = emailServer.getIPWarmupStatus('198.51.100.1'); console.log(`Warmup day: ${specificIPStatus.day}`); console.log(`Daily limit: ${specificIPStatus.dailyLimit}`); console.log(`Emails sent today: ${specificIPStatus.sentToday}`); // Update IP metrics based on feedback from mailbox providers emailServer.updateIPWarmupMetrics('198.51.100.1', { openRate: 0.25, // 25% open rate bounceRate: 0.02, // 2% bounce rate complaintRate: 0.001 // 0.1% complaint rate }); // Check if an IP can send more emails today if (emailServer.canIPSendMoreToday('198.51.100.1')) { console.log('IP can send more emails today'); } else { console.log('IP has reached its daily sending limit'); } // Change the IP allocation policy emailServer.setIPAllocationPolicy('volume-based'); ``` ## Sender Reputation Monitoring Monitor and manage your domain reputation with these features: ```typescript // Add a domain to monitoring emailServer.addDomainToMonitoring('newdomain.example.com'); // Get reputation data for a specific domain const reputationData = emailServer.getDomainReputationData('example.com'); console.log(`Reputation score: ${reputationData.score}`); console.log(`Bounce rate: ${reputationData.bounceRate}`); console.log(`Complaint rate: ${reputationData.complaintRate}`); // Get a summary of all domains const summary = emailServer.getReputationSummary(); console.log('Domain reputation summary:', summary); // Record a custom engagement event emailServer.recordReputationEvent('example.com', { type: 'open', count: 15 }); ``` ## Updating Configuration at Runtime DCRouter allows updating configurations dynamically without restarting: ```typescript // Update domain rules const newRules: IDomainRule[] = [ // New rules here ]; emailServer.updateDomainRules(newRules); // Update server options emailServer.updateOptions({ maxMessageSize: 50 * 1024 * 1024, // 50MB maxClients: 200, defaultServer: 'new-relay.example.com' }); ``` This example configuration covers a wide range of use cases from simple forwarding to advanced security scanning, IP warmup, and reputation management, showcasing DCRouter's versatility as an email routing and processing solution.