mirror of
https://github.com/dawidd6/action-send-mail.git
synced 2026-09-17 17:09:30 +07:00
67ce3558d6
Co-authored-by: dawidd6 <9713907+dawidd6@users.noreply.github.com>
126 lines
4.5 KiB
TypeScript
126 lines
4.5 KiB
TypeScript
import { EventEmitter } from 'node:events';
|
|
import * as shared from '../shared/index.js';
|
|
import type { SMTPTransportOptions, SMTPTransportGetSocketCallback, SMTPTransportSendCallback, SMTPSentMessageInfo } from '../smtp-transport/index.js';
|
|
import type MailMessage from '../mailer/mail-message.js';
|
|
import type { default as Mail, SendMailOptions, VerifyCallback } from '../mailer/index.js';
|
|
/**
|
|
* Options for the pooled SMTP transport, the SMTP transport options plus the pool settings
|
|
*/
|
|
export interface SMTPPoolOptions extends SMTPTransportOptions {
|
|
/** Set to true to get this pooled transport from createTransport */
|
|
pool?: boolean | undefined;
|
|
/** Maximum number of open connections, defaults to 5 */
|
|
maxConnections?: number | undefined;
|
|
/** Number of messages a connection sends before it is closed and replaced, defaults to 100 */
|
|
maxMessages?: number | undefined;
|
|
/** Maximum number of messages to send in rateDelta milliseconds, unlimited when not set */
|
|
rateLimit?: number | undefined;
|
|
/** Time window for rateLimit in milliseconds, defaults to 1000 */
|
|
rateDelta?: number | undefined;
|
|
/** How many times a message is requeued when its connection closes while sending, unlimited when not set or negative */
|
|
maxRequeues?: number | undefined;
|
|
}
|
|
/**
|
|
* The pool options once the constructor has applied the defaults
|
|
*/
|
|
export type SMTPPoolResolvedOptions = SMTPPoolOptions & {
|
|
maxConnections: number;
|
|
maxMessages: number;
|
|
};
|
|
/**
|
|
* Result of a message sent through the pool, same as for the SMTP transport
|
|
*/
|
|
export type SMTPPoolSentMessageInfo = SMTPSentMessageInfo;
|
|
/**
|
|
* Callback for send()
|
|
*/
|
|
export type SMTPPoolSendCallback = SMTPTransportSendCallback;
|
|
/**
|
|
* A message waiting in the pool queue
|
|
*/
|
|
export interface SMTPPoolQueueEntry {
|
|
/** The message to send */
|
|
mail: MailMessage;
|
|
/** How many times the entry was put back on the queue after its connection closed */
|
|
requeueAttempts: number;
|
|
/** Callback to run once the message is sent or failed */
|
|
callback: SMTPPoolSendCallback;
|
|
/** Message-ID value without the angle brackets, set when the entry is assigned to a connection */
|
|
messageId?: string | undefined;
|
|
}
|
|
/**
|
|
* Rate limiter state of the pool
|
|
*/
|
|
export interface SMTPPoolRateLimit {
|
|
/** Messages assigned within the current window */
|
|
counter: number;
|
|
/** Timer that clears the current window */
|
|
timeout: NodeJS.Timeout | null;
|
|
/** Availability callbacks waiting for the window to clear */
|
|
waiting: Array<() => void>;
|
|
/** Start of the current window as a timestamp, false when no window is open */
|
|
checkpoint: number | false;
|
|
/** Window length in milliseconds */
|
|
delta: number;
|
|
/** Maximum number of messages per window, 0 for no limit */
|
|
limit: number;
|
|
}
|
|
/**
|
|
* Creates a SMTP pool transport object for Nodemailer
|
|
*
|
|
* @constructor
|
|
* @param options SMTP Connection options
|
|
*/
|
|
declare class SMTPPool extends EventEmitter {
|
|
options: SMTPPoolResolvedOptions;
|
|
logger: shared.Logger;
|
|
name: string;
|
|
version: string;
|
|
idling: boolean;
|
|
/**
|
|
* The Mail instance using this transport, assigned by Mail
|
|
*/
|
|
mailer?: Mail<SMTPPoolSentMessageInfo> | undefined;
|
|
constructor(options?: SMTPPoolOptions | string);
|
|
/**
|
|
* Placeholder function for creating proxy sockets. This method immediatelly returns
|
|
* without a socket
|
|
*
|
|
* @param options Connection options
|
|
* @param callback Callback function to run with the socket keys
|
|
*/
|
|
getSocket(options: SMTPPoolOptions, callback: SMTPTransportGetSocketCallback): void;
|
|
/**
|
|
* Queues an e-mail to be sent using the selected settings
|
|
*
|
|
* @param mail Mail object
|
|
* @param callback Callback function
|
|
*/
|
|
send(mail: MailMessage, callback: SMTPPoolSendCallback): boolean;
|
|
/**
|
|
* Closes all connections in the pool. If there is a message being sent, the connection
|
|
* is closed later
|
|
*/
|
|
close(): void;
|
|
/**
|
|
* Returns true if there are free slots in the queue
|
|
*/
|
|
isIdle(): boolean;
|
|
/**
|
|
* Verifies SMTP configuration
|
|
*
|
|
* @param callback Callback function
|
|
*/
|
|
verify(): Promise<true>;
|
|
verify(callback: VerifyCallback): void;
|
|
}
|
|
/**
|
|
* Type aliases in the layout of @types/nodemailer, so `SMTPPool.Options` style references keep working
|
|
*/
|
|
declare namespace SMTPPool {
|
|
type Options = SMTPPoolOptions;
|
|
type MailOptions = SendMailOptions;
|
|
type SentMessageInfo = SMTPPoolSentMessageInfo;
|
|
}
|
|
export default SMTPPool;
|