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; |