/** * SMTP Data Handler * Responsible for processing email data during and after DATA command */ import * as plugins from '../../../plugins.js'; import type { ISmtpSession, ISmtpTransactionResult } from './interfaces.js'; import type { IDataHandler, ISmtpServer } from './interfaces.js'; import { Email } from '../../core/classes.email.js'; /** * Handles SMTP DATA command and email data processing */ export declare class DataHandler implements IDataHandler { /** * Reference to the SMTP server instance */ private smtpServer; /** * Creates a new data handler * @param smtpServer - SMTP server instance */ constructor(smtpServer: ISmtpServer); /** * Process incoming email data * @param socket - Client socket * @param data - Data chunk * @returns Promise that resolves when the data is processed */ processEmailData(socket: plugins.net.Socket | plugins.tls.TLSSocket, data: string): Promise; /** * Handle raw data chunks during DATA mode (optimized for large messages) * @param socket - Client socket * @param data - Raw data chunk */ handleDataReceived(socket: plugins.net.Socket | plugins.tls.TLSSocket, data: string): Promise; /** * Process email data chunks efficiently for large messages * @param chunks - Array of email data chunks * @returns Processed email data string */ private processEmailDataStreaming; /** * Process a complete email * @param rawData - Raw email data * @param session - SMTP session * @returns Promise that resolves with the Email object */ processEmail(rawData: string, session: ISmtpSession): Promise; /** * Parse email from raw data * @param rawData - Raw email data * @param session - SMTP session * @returns Email object */ private parseEmailFromData; /** * Process a complete email (legacy method) * @param session - SMTP session * @returns Promise that resolves with the result of the transaction */ processEmailLegacy(session: ISmtpSession): Promise; /** * Save an email to disk * @param session - SMTP session */ saveEmail(session: ISmtpSession): void; /** * Parse an email into an Email object * @param session - SMTP session * @returns Promise that resolves with the parsed Email object */ parseEmail(session: ISmtpSession): Promise; /** * Basic fallback method for parsing emails * @param session - SMTP session * @returns The parsed Email object */ private parseEmailBasic; /** * Handle multipart content parsing * @param email - Email object to update * @param bodyText - Body text to parse * @param boundary - MIME boundary */ private handleMultipartContent; /** * Handle end of data marker received * @param socket - Client socket * @param session - SMTP session */ private handleEndOfData; /** * Reset session after email processing * @param session - SMTP session */ private resetSession; /** * Send a response to the client * @param socket - Client socket * @param response - Response message */ private sendResponse; /** * Check if a socket error is potentially recoverable * @param error - The error that occurred * @returns Whether the error is potentially recoverable */ private isRecoverableSocketError; /** * Handle recoverable socket errors with retry logic * @param socket - Client socket * @param error - The error that occurred * @param response - The response that failed to send */ private handleSocketError; /** * Handle email data (interface requirement) */ handleData(socket: plugins.net.Socket | plugins.tls.TLSSocket, data: string, session: ISmtpSession): Promise; /** * Clean up resources */ destroy(): void; }