145 lines
3.1 KiB
TypeScript
145 lines
3.1 KiB
TypeScript
|
/**
|
||
|
* SMTP Client Constants and Error Codes
|
||
|
* All constants, error codes, and enums for SMTP client operations
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* SMTP response codes
|
||
|
*/
|
||
|
export const SMTP_CODES = {
|
||
|
// Positive completion replies
|
||
|
SERVICE_READY: 220,
|
||
|
SERVICE_CLOSING: 221,
|
||
|
AUTHENTICATION_SUCCESSFUL: 235,
|
||
|
REQUESTED_ACTION_OK: 250,
|
||
|
USER_NOT_LOCAL: 251,
|
||
|
CANNOT_VERIFY_USER: 252,
|
||
|
|
||
|
// Positive intermediate replies
|
||
|
START_MAIL_INPUT: 354,
|
||
|
|
||
|
// Transient negative completion replies
|
||
|
SERVICE_NOT_AVAILABLE: 421,
|
||
|
MAILBOX_BUSY: 450,
|
||
|
LOCAL_ERROR: 451,
|
||
|
INSUFFICIENT_STORAGE: 452,
|
||
|
UNABLE_TO_ACCOMMODATE: 455,
|
||
|
|
||
|
// Permanent negative completion replies
|
||
|
SYNTAX_ERROR: 500,
|
||
|
SYNTAX_ERROR_PARAMETERS: 501,
|
||
|
COMMAND_NOT_IMPLEMENTED: 502,
|
||
|
BAD_SEQUENCE: 503,
|
||
|
PARAMETER_NOT_IMPLEMENTED: 504,
|
||
|
MAILBOX_UNAVAILABLE: 550,
|
||
|
USER_NOT_LOCAL_TRY_FORWARD: 551,
|
||
|
EXCEEDED_STORAGE: 552,
|
||
|
MAILBOX_NAME_NOT_ALLOWED: 553,
|
||
|
TRANSACTION_FAILED: 554
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* SMTP command names
|
||
|
*/
|
||
|
export const SMTP_COMMANDS = {
|
||
|
HELO: 'HELO',
|
||
|
EHLO: 'EHLO',
|
||
|
MAIL_FROM: 'MAIL FROM',
|
||
|
RCPT_TO: 'RCPT TO',
|
||
|
DATA: 'DATA',
|
||
|
RSET: 'RSET',
|
||
|
NOOP: 'NOOP',
|
||
|
QUIT: 'QUIT',
|
||
|
STARTTLS: 'STARTTLS',
|
||
|
AUTH: 'AUTH'
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* Authentication methods
|
||
|
*/
|
||
|
export const AUTH_METHODS = {
|
||
|
PLAIN: 'PLAIN',
|
||
|
LOGIN: 'LOGIN',
|
||
|
OAUTH2: 'XOAUTH2',
|
||
|
CRAM_MD5: 'CRAM-MD5'
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* Common SMTP extensions
|
||
|
*/
|
||
|
export const SMTP_EXTENSIONS = {
|
||
|
PIPELINING: 'PIPELINING',
|
||
|
SIZE: 'SIZE',
|
||
|
STARTTLS: 'STARTTLS',
|
||
|
AUTH: 'AUTH',
|
||
|
EIGHT_BIT_MIME: '8BITMIME',
|
||
|
CHUNKING: 'CHUNKING',
|
||
|
ENHANCED_STATUS_CODES: 'ENHANCEDSTATUSCODES',
|
||
|
DSN: 'DSN'
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* Default configuration values
|
||
|
*/
|
||
|
export const DEFAULTS = {
|
||
|
CONNECTION_TIMEOUT: 60000, // 60 seconds
|
||
|
SOCKET_TIMEOUT: 300000, // 5 minutes
|
||
|
COMMAND_TIMEOUT: 30000, // 30 seconds
|
||
|
MAX_CONNECTIONS: 5,
|
||
|
MAX_MESSAGES: 100,
|
||
|
PORT_SMTP: 25,
|
||
|
PORT_SUBMISSION: 587,
|
||
|
PORT_SMTPS: 465,
|
||
|
RETRY_ATTEMPTS: 3,
|
||
|
RETRY_DELAY: 1000,
|
||
|
POOL_IDLE_TIMEOUT: 30000 // 30 seconds
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* Error types for classification
|
||
|
*/
|
||
|
export enum SmtpErrorType {
|
||
|
CONNECTION_ERROR = 'CONNECTION_ERROR',
|
||
|
AUTHENTICATION_ERROR = 'AUTHENTICATION_ERROR',
|
||
|
PROTOCOL_ERROR = 'PROTOCOL_ERROR',
|
||
|
TIMEOUT_ERROR = 'TIMEOUT_ERROR',
|
||
|
TLS_ERROR = 'TLS_ERROR',
|
||
|
SYNTAX_ERROR = 'SYNTAX_ERROR',
|
||
|
MAILBOX_ERROR = 'MAILBOX_ERROR',
|
||
|
QUOTA_ERROR = 'QUOTA_ERROR',
|
||
|
UNKNOWN_ERROR = 'UNKNOWN_ERROR'
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Regular expressions for parsing
|
||
|
*/
|
||
|
export const REGEX_PATTERNS = {
|
||
|
EMAIL_ADDRESS: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
||
|
RESPONSE_CODE: /^(\d{3})([ -])(.*)/,
|
||
|
ENHANCED_STATUS: /^(\d\.\d\.\d)\s/,
|
||
|
AUTH_CAPABILITIES: /AUTH\s+(.+)/i,
|
||
|
SIZE_EXTENSION: /SIZE\s+(\d+)/i
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* Line endings and separators
|
||
|
*/
|
||
|
export const LINE_ENDINGS = {
|
||
|
CRLF: '\r\n',
|
||
|
LF: '\n',
|
||
|
CR: '\r'
|
||
|
} as const;
|
||
|
|
||
|
/**
|
||
|
* Connection states for internal use
|
||
|
*/
|
||
|
export const CONNECTION_STATES = {
|
||
|
DISCONNECTED: 'disconnected',
|
||
|
CONNECTING: 'connecting',
|
||
|
CONNECTED: 'connected',
|
||
|
AUTHENTICATED: 'authenticated',
|
||
|
READY: 'ready',
|
||
|
BUSY: 'busy',
|
||
|
CLOSING: 'closing',
|
||
|
ERROR: 'error'
|
||
|
} as const;
|