diff --git a/types/smtp-server/index.d.ts b/types/smtp-server/index.d.ts index 3b5f320613..eaaf108777 100644 --- a/types/smtp-server/index.d.ts +++ b/types/smtp-server/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for smtp-server 3.4 +// Type definitions for smtp-server 3.5 // Project: https://github.com/nodemailer/smtp-server // Definitions by: markisme // taisiias @@ -12,7 +12,7 @@ import { EventEmitter } from 'events'; import * as net from 'net'; import * as shared from 'nodemailer/lib/shared'; -import { Readable } from 'stream'; +import { PassThrough } from 'stream'; import * as tls from 'tls'; export type ms = number; @@ -113,6 +113,19 @@ export interface SMTPServerSession { tlsOptions: tls.TlsOptions; } +export interface SMTPServerDataStream extends PassThrough { + /** + * number of bytes read from DATA stream + */ + byteLength: number; + /** + * boolean, if set to true, the message was oversized. + * When creating the server you can define maximum allowed message size with + * the size option, see RFC1870 for details. + */ + sizeExceeded: boolean; +} + export interface SMTPServerEnvelope { /** * includes an address object or is set to false @@ -270,7 +283,7 @@ export interface SMTPServerOptions extends tls.TlsOptions { /** * the callback to handle incoming messages ([see details](https://github.com/andris9/smtp-server#processing-incoming-message)) */ - onData?(stream: Readable, session: SMTPServerSession, callback: (err?: Error | null) => void): void; + onData?(stream: SMTPServerDataStream, session: SMTPServerSession, callback: (err?: Error | null) => void): void; /** * the callback that informs about closed client connection */ @@ -310,7 +323,7 @@ export class SMTPServer extends EventEmitter { /** Override this */ onConnect(session: SMTPServerSession, callback: (err?: Error | null) => void): void; /** Override this */ - onData(stream: Readable, session: SMTPServerSession, callback: (err?: Error | null) => void): void; + onData(stream: SMTPServerDataStream, session: SMTPServerSession, callback: (err?: Error | null) => void): void; /** Override this */ onMailFrom(address: SMTPServerAddress, session: SMTPServerSession, callback: (err?: Error | null) => void): void; /** Override this */ diff --git a/types/smtp-server/smtp-server-tests.ts b/types/smtp-server/smtp-server-tests.ts index 52578ad4a8..95a1338d19 100644 --- a/types/smtp-server/smtp-server-tests.ts +++ b/types/smtp-server/smtp-server-tests.ts @@ -1,5 +1,5 @@ import { AddressInfo } from 'net'; -import { SMTPServer, SMTPServerAddress, SMTPServerAuthentication, SMTPServerAuthenticationResponse, SMTPServerOptions, SMTPServerSession } from 'smtp-server'; +import { SMTPServer, SMTPServerAddress, SMTPServerAuthentication, SMTPServerAuthenticationResponse, SMTPServerDataStream, SMTPServerOptions, SMTPServerSession } from 'smtp-server'; import { Readable } from 'stream'; function test_with_handlers_as_options() { @@ -42,9 +42,14 @@ function test_with_handlers_as_options() { callback(); } - function onData(stream: Readable, session: SMTPServerSession, callback: (err?: Error) => void): void { + function onData(stream: SMTPServerDataStream, session: SMTPServerSession, callback: (err?: Error) => void): void { console.log(`[${session.id}] onData started`); + if (stream.sizeExceeded) { + callback(new Error('Message too big')); + return; + } + let messageLength = 0; stream.on('data', (chunk: Buffer) => {