fix(mail options): simplify mail options

This commit is contained in:
2025-05-27 19:28:12 +00:00
parent 2aeb52bf13
commit 6aa54d974e
5 changed files with 250 additions and 19 deletions

View File

@ -3,10 +3,9 @@ import * as paths from './paths.js';
// Certificate types are available via plugins.tsclass
// Import the consolidated email config
import type { IEmailConfig, IDomainRule } from './mail/routing/classes.email.config.js';
import type { EmailProcessingMode } from './mail/delivery/interfaces.js';
import { UnifiedEmailServer } from './mail/routing/classes.unified.email.server.js';
// Import the email server and its configuration
import { UnifiedEmailServer, type IUnifiedEmailServerOptions } from './mail/routing/classes.unified.email.server.js';
import type { IDomainRule, EmailProcessingMode } from './mail/routing/classes.email.config.js';
import { logger } from './logger.js';
// Import the email configuration helpers directly from mail/delivery
import { configureEmailStorage, configureEmailServer } from './mail/delivery/index.js';
@ -19,10 +18,10 @@ export interface IDcRouterOptions {
smartProxyConfig?: plugins.smartproxy.ISmartProxyOptions;
/**
* Consolidated email configuration
* Email server configuration
* This enables all email handling with pattern-based routing
*/
emailConfig?: IEmailConfig;
emailConfig?: IUnifiedEmailServerOptions;
/**
* Custom email port configuration
@ -238,7 +237,7 @@ export class DcRouter {
/**
* Generate SmartProxy routes for email configuration
*/
private generateEmailRoutes(emailConfig: IEmailConfig): plugins.smartproxy.IRouteConfig[] {
private generateEmailRoutes(emailConfig: IUnifiedEmailServerOptions): plugins.smartproxy.IRouteConfig[] {
const emailRoutes: plugins.smartproxy.IRouteConfig[] = [];
// Get the custom port mapping if available, otherwise use defaults
@ -442,20 +441,22 @@ export class DcRouter {
throw new Error('Email configuration is required for unified email handling');
}
const emailConfig = this.options.emailConfig;
// Apply port mapping if behind SmartProxy
const portMapping = this.options.emailPortConfig?.portMapping || {
25: 10025, // SMTP
587: 10587, // Submission
465: 10465 // SMTPS
};
// Create unified email server with mapped internal ports
this.emailServer = new UnifiedEmailServer(this, {
...emailConfig,
domains: emailConfig.domains || [], // Provide default empty array
ports: emailConfig.ports.map(port => portMapping[port] || port + 10000),
// Create config with mapped ports
const emailConfig: IUnifiedEmailServerOptions = {
...this.options.emailConfig,
ports: this.options.emailConfig.ports.map(port => portMapping[port] || port + 10000),
hostname: 'localhost' // Listen on localhost for SmartProxy forwarding
});
};
// Create unified email server
this.emailServer = new UnifiedEmailServer(this, emailConfig);
// Set up error handling
this.emailServer.on('error', (err: Error) => {
@ -465,14 +466,14 @@ export class DcRouter {
// Start the server
await this.emailServer.start();
logger.log('info', `Email server started on ports: ${this.emailServer['options'].ports.join(', ')}`);
logger.log('info', `Email server started on ports: ${emailConfig.ports.join(', ')}`);
}
/**
* Update the unified email configuration
* @param config New email configuration
*/
public async updateEmailConfig(config: IEmailConfig): Promise<void> {
public async updateEmailConfig(config: IUnifiedEmailServerOptions): Promise<void> {
// Stop existing email components
await this.stopUnifiedEmailComponents();
@ -598,7 +599,7 @@ export class DcRouter {
}
}
// Re-export types for convenience
export type { IEmailConfig, IDomainRule, EmailProcessingMode };
// Re-export email server types for convenience
export type { IUnifiedEmailServerOptions, IDomainRule, EmailProcessingMode };
export default DcRouter;