242 lines
4.4 KiB
TypeScript
242 lines
4.4 KiB
TypeScript
/**
|
|
* SMTP Client Interfaces and Types
|
|
* All interface definitions for the modular SMTP client
|
|
*/
|
|
|
|
import type * as tls from 'node:tls';
|
|
import type * as net from 'node:net';
|
|
import type { Email } from '../../core/classes.email.js';
|
|
|
|
/**
|
|
* SMTP client connection options
|
|
*/
|
|
export interface ISmtpClientOptions {
|
|
/** Hostname of the SMTP server */
|
|
host: string;
|
|
|
|
/** Port to connect to */
|
|
port: number;
|
|
|
|
/** Whether to use TLS for the connection */
|
|
secure?: boolean;
|
|
|
|
/** Connection timeout in milliseconds */
|
|
connectionTimeout?: number;
|
|
|
|
/** Socket timeout in milliseconds */
|
|
socketTimeout?: number;
|
|
|
|
/** Domain name for EHLO command */
|
|
domain?: string;
|
|
|
|
/** Authentication options */
|
|
auth?: ISmtpAuthOptions;
|
|
|
|
/** TLS options */
|
|
tls?: tls.ConnectionOptions;
|
|
|
|
/** Maximum number of connections in pool */
|
|
pool?: boolean;
|
|
maxConnections?: number;
|
|
maxMessages?: number;
|
|
|
|
/** Enable debug logging */
|
|
debug?: boolean;
|
|
|
|
/** Proxy settings */
|
|
proxy?: string;
|
|
}
|
|
|
|
/**
|
|
* Authentication options for SMTP
|
|
*/
|
|
export interface ISmtpAuthOptions {
|
|
/** Username */
|
|
user?: string;
|
|
|
|
/** Password */
|
|
pass?: string;
|
|
|
|
/** OAuth2 settings */
|
|
oauth2?: IOAuth2Options;
|
|
|
|
/** Authentication method preference */
|
|
method?: 'PLAIN' | 'LOGIN' | 'OAUTH2' | 'AUTO';
|
|
}
|
|
|
|
/**
|
|
* OAuth2 authentication options
|
|
*/
|
|
export interface IOAuth2Options {
|
|
/** OAuth2 user identifier */
|
|
user: string;
|
|
|
|
/** OAuth2 client ID */
|
|
clientId: string;
|
|
|
|
/** OAuth2 client secret */
|
|
clientSecret: string;
|
|
|
|
/** OAuth2 refresh token */
|
|
refreshToken: string;
|
|
|
|
/** OAuth2 access token */
|
|
accessToken?: string;
|
|
|
|
/** Token expiry time */
|
|
expires?: number;
|
|
}
|
|
|
|
/**
|
|
* Result of an email send operation
|
|
*/
|
|
export interface ISmtpSendResult {
|
|
/** Whether the send was successful */
|
|
success: boolean;
|
|
|
|
/** Message ID from server */
|
|
messageId?: string;
|
|
|
|
/** List of accepted recipients */
|
|
acceptedRecipients: string[];
|
|
|
|
/** List of rejected recipients */
|
|
rejectedRecipients: string[];
|
|
|
|
/** Error information if failed */
|
|
error?: Error;
|
|
|
|
/** Server response */
|
|
response?: string;
|
|
|
|
/** Envelope information */
|
|
envelope?: ISmtpEnvelope;
|
|
}
|
|
|
|
/**
|
|
* SMTP envelope information
|
|
*/
|
|
export interface ISmtpEnvelope {
|
|
/** Sender address */
|
|
from: string;
|
|
|
|
/** Recipient addresses */
|
|
to: string[];
|
|
}
|
|
|
|
/**
|
|
* Connection pool status
|
|
*/
|
|
export interface IConnectionPoolStatus {
|
|
/** Total connections in pool */
|
|
total: number;
|
|
|
|
/** Active connections */
|
|
active: number;
|
|
|
|
/** Idle connections */
|
|
idle: number;
|
|
|
|
/** Pending connection requests */
|
|
pending: number;
|
|
}
|
|
|
|
/**
|
|
* SMTP command response
|
|
*/
|
|
export interface ISmtpResponse {
|
|
/** Response code */
|
|
code: number;
|
|
|
|
/** Response message */
|
|
message: string;
|
|
|
|
/** Enhanced status code */
|
|
enhancedCode?: string;
|
|
|
|
/** Raw response */
|
|
raw: string;
|
|
}
|
|
|
|
/**
|
|
* Connection state
|
|
*/
|
|
export enum ConnectionState {
|
|
DISCONNECTED = 'disconnected',
|
|
CONNECTING = 'connecting',
|
|
CONNECTED = 'connected',
|
|
AUTHENTICATED = 'authenticated',
|
|
READY = 'ready',
|
|
BUSY = 'busy',
|
|
CLOSING = 'closing',
|
|
ERROR = 'error'
|
|
}
|
|
|
|
/**
|
|
* SMTP capabilities
|
|
*/
|
|
export interface ISmtpCapabilities {
|
|
/** Supported extensions */
|
|
extensions: Set<string>;
|
|
|
|
/** Maximum message size */
|
|
maxSize?: number;
|
|
|
|
/** Supported authentication methods */
|
|
authMethods: Set<string>;
|
|
|
|
/** Support for pipelining */
|
|
pipelining: boolean;
|
|
|
|
/** Support for STARTTLS */
|
|
starttls: boolean;
|
|
|
|
/** Support for 8BITMIME */
|
|
eightBitMime: boolean;
|
|
}
|
|
|
|
/**
|
|
* Internal connection interface
|
|
*/
|
|
export interface ISmtpConnection {
|
|
/** Socket connection */
|
|
socket: net.Socket | tls.TLSSocket;
|
|
|
|
/** Connection state */
|
|
state: ConnectionState;
|
|
|
|
/** Server capabilities */
|
|
capabilities?: ISmtpCapabilities;
|
|
|
|
/** Connection options */
|
|
options: ISmtpClientOptions;
|
|
|
|
/** Whether connection is secure */
|
|
secure: boolean;
|
|
|
|
/** Connection creation time */
|
|
createdAt: Date;
|
|
|
|
/** Last activity time */
|
|
lastActivity: Date;
|
|
|
|
/** Number of messages sent */
|
|
messageCount: number;
|
|
}
|
|
|
|
/**
|
|
* Error context for detailed error reporting
|
|
*/
|
|
export interface ISmtpErrorContext {
|
|
/** Command that caused the error */
|
|
command?: string;
|
|
|
|
/** Server response */
|
|
response?: ISmtpResponse;
|
|
|
|
/** Connection state */
|
|
connectionState?: ConnectionState;
|
|
|
|
/** Additional context data */
|
|
data?: Record<string, any>;
|
|
} |