Skip to content

LmtpClient

Defined in: packages/net-smtp/src/lmtp/lmtp-client.ts:24

LMTP client over any transport.

LMTP (RFC 2033) is SMTP with LHLO in place of EHLO and, critically, one reply per recipient after the message body instead of a single reply.

It extends SmtpCore rather than SmtpClient precisely because of that difference: inheriting SmtpClient.data() would expose a method that reads only the first recipient’s reply and leaves the rest to be mis-attributed to the next command.

new LmtpClient(source, options?): LmtpClient

Defined in: packages/net-smtp/src/lmtp/lmtp-client.ts:31

Transport

Any Transport. Dovecot LMTP is commonly reached over a Unix socket — for a Node.js Duplex/net.Socket, wrap it first: new DuplexTransport(socket) from @ac-kit/net-transport-node.

SmtpClientOptions

Buffer, line-length and timeout tuning.

LmtpClient

SmtpCore.constructor

get buffered(): number

Defined in: packages/net-core/src/session.ts:243

Bytes received but not yet decoded.

number

SmtpCore.buffered


get pendingExchanges(): number

Defined in: packages/net-core/src/session.ts:248

Number of outstanding exchanges, including abort tombstones.

number

SmtpCore.pendingExchanges

[asyncDispose](): Promise<void>

Defined in: packages/net-core/src/session.ts:277

Destroys the session, so it can be used with await using.

Promise<void>

SmtpCore.[asyncDispose]


command(command, options?): Promise<SmtpResponse>

Defined in: packages/net-smtp/src/smtp/smtp-client.ts:208

Send a raw command line and read its reply.

string

The command line, without a terminator.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse>

The parsed reply.

SmtpCore.command


dataMulti(message, recipientCount, options?): Promise<SmtpResponse[]>

Defined in: packages/net-smtp/src/lmtp/lmtp-client.ts:64

Run the DATA exchange and read one reply per accepted recipient.

Replies arrive in the order the corresponding RCPT TO commands were issued (RFC 2033 §4.2).

string

The raw message body; dot-stuffing is applied automatically.

number

Number of RCPT TO commands the server accepted.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse[]>

One reply per recipient, in RCPT TO order.

If the server does not answer 354.


destroy(error?): void

Defined in: packages/net-core/src/session.ts:271

Tear the session down, rejecting every outstanding exchange.

Rejection happens here rather than relying on the transport emitting close, so callers are never left with promises that hang against a transport that closes silently.

unknown

Optional cause reported to outstanding exchanges.

void

SmtpCore.destroy


ehlo(domain, options?): Promise<SmtpResponse>

Defined in: packages/net-smtp/src/smtp/smtp-client.ts:112

Send EHLO domain and return the advertised extensions.

string

The client’s own domain name.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse>

The parsed reply, one entry per capability line.

SmtpCore.ehlo


end(): Promise<void>

Defined in: packages/net-core/src/session.ts:258

Half-close the outbound direction and flush pending writes.

Prefer this over destroy for protocols with a farewell command, so the peer sees an orderly shutdown.

Promise<void>

SmtpCore.end


isSubscribed<K>(event, listener): boolean

Defined in: packages/async/src/events/event-dispatcher-map-base.ts:38

Check if a callback is subscribed to a specific event.

K extends "push" | keyof BaseSessionEvents

K

The event name.

Callable<SmtpClientEvents[K]>

The callback to check.

boolean

SmtpCore.isSubscribed


lhlo(domain, options?): Promise<SmtpResponse>

Defined in: packages/net-smtp/src/lmtp/lmtp-client.ts:45

Send LHLO domain, the LMTP greeting.

string

The client’s own domain name.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse>

The parsed reply, one entry per capability line.


mailFrom(address, params?, options?): Promise<SmtpResponse>

Defined in: packages/net-smtp/src/smtp/smtp-client.ts:127

Send MAIL FROM:<address>.

string

The reverse-path, without angle brackets.

string

Optional ESMTP parameters, for example SIZE=1234.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse>

The parsed reply.

SmtpCore.mailFrom


quit(options?): Promise<SmtpResponse>

Defined in: packages/net-smtp/src/smtp/smtp-client.ts:197

Send QUIT and read the farewell reply.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse>

The parsed reply, normally 221.

SmtpCore.quit


rcptTo(address, options?): Promise<SmtpResponse>

Defined in: packages/net-smtp/src/smtp/smtp-client.ts:145

Send RCPT TO:<address>.

string

The forward-path, without angle brackets.

ExchangeOptions<string>

Abort, timeout and abort-policy overrides.

Promise<SmtpResponse>

The parsed reply.

SmtpCore.rcptTo


subscribe<K>(event, listener, options?): Callable | null

Defined in: packages/async/src/events/event-dispatcher-map-base.ts:23

K extends "push" | keyof BaseSessionEvents

K

Callable<SmtpClientEvents[K]>

EventDispatcherSubscribeOptions

Callable | null

SmtpCore.subscribe


unsubscribe<K>(event, listener): void

Defined in: packages/async/src/events/event-dispatcher-map-base.ts:31

Unsubscribe a callback from a specific event.

K extends "push" | keyof BaseSessionEvents

K

The event name.

Callable<SmtpClientEvents[K]>

The callback to remove.

void

SmtpCore.unsubscribe


upgradeTransport(transport): void

Defined in: packages/net-smtp/src/smtp/smtp-client.ts:229

Replace the transport after a successful STARTTLS.

Buffered plaintext is discarded rather than carried across: bytes a peer sent before the handshake must never be read as part of the secured session, which is the STARTTLS command-injection flaw.

Transport

The TLS transport wrapping the same connection.

void

SmtpCore.upgradeTransport


wait<K>(event, options?): Promise<SmtpClientEvents[K]>

Defined in: packages/async/src/events/event-dispatcher-map-base.ts:45

Wait for the next occurrence of a specific event, optionally matching a predicate.

This is a convenience method that subscribes to the dispatcher, waits for the next event that matches the predicate (if provided), and then unsubscribes automatically.

K extends "push" | keyof BaseSessionEvents

K

The event name to wait for.

EventDispatcherWaitOptions<SmtpClientEvents[K]>

Optional settings including predicate and abort signal.

Promise<SmtpClientEvents[K]>

A promise that resolves with the event arguments as an array.

SmtpCore.wait