@carlgo11/smtp-server
Advanced tools
Comparing version 0.0.1 to 0.0.2
{ | ||
"name": "@carlgo11/smtp-server", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "Simple lightweight SMTP server written in Node.js", | ||
"main": "src/code/SMTPServer.js", | ||
"private": false, | ||
"main": "src/core/SMTPServer.js", | ||
"scripts": { | ||
"serve": "node src/core/SMTPServer.js", | ||
"test": "node --test" | ||
@@ -10,0 +8,0 @@ }, |
@@ -53,3 +53,3 @@ # **SMTP Server** | ||
```js | ||
import SMTPServer from '@carlgo11/smtp-server'; | ||
import {SMTPServer, Response} from '@carlgo11/smtp-server'; | ||
@@ -56,0 +56,0 @@ // Create server instance |
@@ -13,3 +13,3 @@ import Response from '../models/Response.js'; | ||
export function handleCommand(message, session, server) { | ||
export function handleCommand(message, session) { | ||
const command = message.trim().split(' ')[0].toUpperCase(); | ||
@@ -20,4 +20,4 @@ const args = message.substring(command.length).trim().split(' '); | ||
handler ? | ||
handler(args, session, server): | ||
handler(args, session): | ||
session.send(new Response('Command not implemented', 502, [5, 5, 1])); | ||
} |
import context from '../core/ServerContext.js'; | ||
import Response from '../models/Response.js'; | ||
import events from '../core/Event.js'; | ||
@@ -34,3 +35,3 @@ /** | ||
clearTimeout(dataTimeout); | ||
server.removeListener('dataChunk', onDataChunk); | ||
events.removeListener('DATA', onDataChunk); | ||
@@ -49,3 +50,2 @@ // Transition to DATA_DONE state after processing is complete | ||
const handleDataComplete = (messageData) => { | ||
server.emit('MESSAGE', session, messageData); | ||
// Pass the message data to the consumer's onDATA handler | ||
@@ -107,3 +107,3 @@ context.onDATA(messageData, session).then((result) => { | ||
// Attach listener for 'dataChunk' event | ||
server.on('dataChunk', onDataChunk); | ||
events.on('DATA', onDataChunk); | ||
} |
import context from '../core/ServerContext.js'; | ||
import events from '../core/Event.js'; | ||
import Response from '../models/Response.js'; | ||
export default function EHLO(args, session, server) { | ||
export default function EHLO(args, session) { | ||
@@ -14,3 +15,3 @@ if (!session.isValidTransition(['NEW', 'STARTTLS'])) | ||
server.emit('EHLO', session, domain); | ||
events.emit('EHLO', session, domain); | ||
@@ -17,0 +18,0 @@ // Wait for external validation |
import context from '../core/ServerContext.js'; | ||
import Response from '../models/Response.js'; | ||
import events from '../core/Event.js'; | ||
export default async function MAIL(args, session, server) { | ||
export default async function MAIL(args, session) { | ||
if (session.state !== session.states.STARTTLS) | ||
@@ -24,3 +25,3 @@ return session.send(session.tls ? | ||
server.emit('MAIL', session, sender); | ||
events.emit('MAIL', session, sender); | ||
@@ -27,0 +28,0 @@ // Wait on external validation |
import context from '../core/ServerContext.js'; | ||
import Response from '../models/Response.js'; | ||
import events from '../core/Event.js'; | ||
export default function RCPT(args, session, server) { | ||
export default function RCPT(args, session) { | ||
if (session.state !== session.states.MAIL_FROM) | ||
@@ -22,3 +23,3 @@ return session.send(new Response(null, 501, [5, 5, 1])); | ||
server.emit('RCPT', session, recipient); | ||
events.emit('RCPT', session, recipient); | ||
@@ -25,0 +26,0 @@ context.onRCPTTO(recipient, session).then((result) => { |
@@ -7,2 +7,3 @@ import net from 'net'; | ||
import _Response from '../models/Response.js'; | ||
import events from './Event.js'; | ||
@@ -33,2 +34,3 @@ // Load commands | ||
events.emit('CONNECT', session); | ||
context.onConnect(session); | ||
@@ -46,3 +48,3 @@ | ||
handleCommand(message, session, server); | ||
handleCommand(message, session); | ||
}); | ||
@@ -79,1 +81,2 @@ | ||
export const Response = _Response | ||
export const Listen = events; |
import tls from 'tls'; | ||
import Logger from '../utils/logger.js'; | ||
import context from './ServerContext.js'; | ||
import events from './Event.js'; | ||
import {handleCommand} from '../commands/CommandHandler.js'; | ||
export function handleTLSConnection(session, server) { | ||
export function handleTLSConnection(session) { | ||
// Create a new TLS socket from the existing socket | ||
@@ -22,3 +23,3 @@ const {tlsOptions} = context; | ||
if (session.state === session.states.DATA_READY) { | ||
server.emit('dataChunk', data, session); | ||
events.emit('DATA', data, session); | ||
} else { | ||
@@ -28,3 +29,3 @@ const message = data.toString().trim(); | ||
handleCommand(message, session, server); | ||
handleCommand(message, session); | ||
} | ||
@@ -35,3 +36,3 @@ }); | ||
context.onDisconnect(session); | ||
server.emit('disconnect'); | ||
events.emit('DISCONNECT', session); | ||
Logger.info('Client disconnected', session.id); | ||
@@ -70,3 +71,3 @@ }); | ||
session.id); | ||
server.emit('secure'); | ||
events.emit('SECURE'); | ||
// context.onSecure(session).then(r => r); | ||
@@ -73,0 +74,0 @@ }); |
@@ -23,10 +23,10 @@ import os from 'os'; | ||
this.states = { | ||
NEW: 'NEW', // Just connected | ||
NEW: 'NEW', // Just connected | ||
EHLO_RECEIVED: 'EHLO_RECEIVED', // EHLO completed | ||
STARTTLS: 'STARTTLS', // STARTTLS completed | ||
MAIL_FROM: 'MAIL_FROM', // MAIL FROM received | ||
RCPT_TO: 'RCPT_TO', // RCPT TO received | ||
DATA_READY: 'DATA_READY', // Data received | ||
DATA_DONE: 'DATA_DONE', // Data received | ||
QUIT: 'QUIT', // Client has quit | ||
STARTTLS: 'STARTTLS', // STARTTLS completed | ||
MAIL_FROM: 'MAIL_FROM', // MAIL FROM received | ||
RCPT_TO: 'RCPT_TO', // RCPT TO received | ||
DATA_READY: 'DATA_READY', // Data received | ||
DATA_DONE: 'DATA_DONE', // Data received | ||
QUIT: 'QUIT', // Client has quit | ||
}; | ||
@@ -33,0 +33,0 @@ |
537
64318
17