UNPKG

smtp-server

Version:

Create custom SMTP servers on the fly

104 lines (86 loc) 4.13 kB
# SMTP Server - Full RFC 2034/3463 ENHANCEDSTATUSCODES Implementation ## Overview This implementation provides full RFC compliance for ENHANCEDSTATUSCODES extension with complete backward compatibility. ## Features Implemented ### ✅ RFC 2034 Compliance - **EHLO Extension Advertisement**: Properly advertises ENHANCEDSTATUSCODES capability - **Enhanced Status Code Responses**: All SMTP responses include appropriate enhanced status codes - **Multi-line Response Support**: Enhanced status codes appear on each line of multi-line responses - **3xx Response Exclusion**: Correctly excludes enhanced status codes from 3xx responses per RFC ### ✅ RFC 3463 Status Code Mapping - **Comprehensive Mapping**: Complete mapping of SMTP response codes to enhanced status codes - **Context-Aware Codes**: Specific enhanced codes for different contexts (mail transaction, authentication, policy, etc.) - **Error Classification**: Proper classification of temporary vs permanent failures ### ✅ DSN (Delivery Status Notification) Support - **MAIL FROM Parameters**: RET (FULL/HDRS) and ENVID support - **RCPT TO Parameters**: NOTIFY (SUCCESS/FAILURE/DELAY/NEVER) and ORCPT support - **Parameter Validation**: Complete validation with appropriate error responses - **Session Management**: DSN data properly maintained throughout SMTP session ### ✅ Backward Compatibility - **Disable Option**: `hideENHANCEDSTATUSCODES: true` completely disables enhanced status codes - **Legacy Behavior**: When disabled, responses are identical to original implementation - **No Breaking Changes**: Existing code continues to work without modification ## Implementation Details ### Enhanced Status Code Mapping ```javascript // Success codes (2xx) 250: '2.0.0' // General success 250: '2.1.0' // MAIL FROM success (context: MAIL_FROM_OK) 250: '2.1.5' // RCPT TO success (context: RCPT_TO_OK) 250: '2.6.0' // DATA success (context: DATA_OK) // Error codes (4xx/5xx) 501: '5.5.4' // Syntax error in parameters 550: '5.1.1' // Mailbox unavailable 552: '5.2.2' // Storage exceeded // ... and many more ``` ### Usage Examples #### Basic Usage (Enhanced Status Codes Enabled - Default) ```javascript const server = new SMTPServer({ // Enhanced status codes enabled by default onMailFrom(address, session, callback) { callback(); // Response: "250 2.1.0 Accepted" } }); ``` #### Backward Compatible Usage (Enhanced Status Codes Disabled) ```javascript const server = new SMTPServer({ hideENHANCEDSTATUSCODES: true, // Disable enhanced status codes onMailFrom(address, session, callback) { callback(); // Response: "250 Accepted" (original behavior) } }); ``` #### DSN Parameter Access ```javascript const server = new SMTPServer({ onMailFrom(address, session, callback) { // Access DSN parameters const ret = session.envelope.dsn.ret; // 'FULL' or 'HDRS' const envid = session.envelope.dsn.envid; // Envelope ID callback(); }, onRcptTo(address, session, callback) { // Access recipient DSN parameters const notify = address.dsn.notify; // ['SUCCESS', 'FAILURE', 'DELAY'] const orcpt = address.dsn.orcpt; // Original recipient callback(); } }); ``` ## Testing - **57 Tests Passing**: All existing tests continue to pass - **11 DSN Tests**: Comprehensive DSN functionality testing - **Backward Compatibility**: Verified that disabled mode produces identical responses - **RFC Compliance**: Enhanced status codes follow RFC 2034/3463 specifications ## Configuration Options - `hideENHANCEDSTATUSCODES: true` - Completely disables enhanced status codes (backward compatibility) - All existing configuration options remain unchanged ## Breaking Changes **None** - This implementation is fully backward compatible. Existing code will continue to work without any modifications. ## RFC References - **RFC 2034**: SMTP Service Extension for Returning Enhanced Error Codes - **RFC 3463**: Enhanced Mail System Status Codes - **RFC 3461**: Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSN)