nodemailer
Version:
Easy as cake e-mail sending from your Node.js applications
144 lines (143 loc) • 5.97 kB
TypeScript
import { EventEmitter } from 'node:events';
import { type SMTPConnectionOptions, type SMTPConnectionAuth, type SMTPConnectionSendInfo } from '../smtp-connection/index.js';
import * as shared from '../shared/index.js';
import { type XOAuth2Options } from '../xoauth2/index.js';
import type { ResultCallback } from '../errors.js';
import type MailMessage from '../mailer/mail-message.js';
import type { default as Mail, SentMessageInfo, SendMailOptions, TransportOptions, VerifyCallback } from '../mailer/index.js';
import type { MimeNodeEnvelope } from '../mime-node/index.js';
/**
* Authentication settings, either from the transport options or from the message data.
* OAuth2 settings are handed to XOAuth2 as is
*/
export interface SMTPTransportAuthOptions extends XOAuth2Options {
/** 'OAuth2' selects XOAUTH2, anything else is a password login, 'LOGIN' when not set */
type?: string | undefined;
/** Username */
user?: string | undefined;
/** Password */
pass?: string | undefined;
/** SASL method to use, e.g. 'PLAIN', 'LOGIN' or 'CRAM-MD5' */
method?: string | undefined;
/** Extra options for the authentication method, handed to a custom SASL handler */
options?: {
[key: string]: any;
} | undefined;
/** Service identifier, an OAuth2 login needs either this or a user */
service?: string | undefined;
}
/**
* Authentication data built by getAuth() and handed to SMTPConnection#login
*/
export interface SMTPTransportAuth extends SMTPConnectionAuth {
/** 'OAUTH2', or the upper cased type from the settings, 'LOGIN' when none was given */
type: string;
/** 'XOAUTH2' for OAuth2, otherwise the configured SASL method, false lets the connection pick one */
method: string | false;
}
/**
* Receives the socket details from getSocket, false when a new socket should be opened. The
* object is merged into the connection options, a proxy handler provides the connected socket
* as `connection`
*/
export type SMTPTransportGetSocketCallback = (err: Error | null, socketOptions?: SMTPConnectionOptions | false) => void;
/**
* Custom socket provider, replaces the getSocket method of the transport
*/
export type SMTPTransportGetSocket = (options: SMTPTransportOptions, callback: SMTPTransportGetSocketCallback) => void;
/**
* Options for the SMTP transport, the connection options plus the transport level settings
*/
export interface SMTPTransportOptions extends SMTPConnectionOptions, TransportOptions {
/** Well-known service name, e.g. 'Gmail', fills in host, port and secure */
service?: string | undefined;
/** Connection url, e.g. 'smtps://user:pass@smtp.example.com', parsed into options */
url?: string | undefined;
/** Authentication settings, no authentication when not set */
auth?: SMTPTransportAuthOptions | undefined;
/** Custom socket provider, e.g. for connecting through a proxy, replaces the getSocket method */
getSocket?: SMTPTransportGetSocket | undefined;
/** Authenticate even when the server does not advertise AUTH, and fail verify() when it does but no credentials were given */
forceAuth?: boolean | undefined;
/** Default SASL method for the password logins when the auth settings do not name one */
authMethod?: string | undefined;
/** Logger component name, defaults to 'smtp-transport' */
component?: string | undefined;
/** Set to true to get a pooled transport from createTransport, this transport does not read it */
pool?: boolean | undefined;
}
/**
* Result of a sent message, the connection result plus the envelope and the Message-ID
*/
export interface SMTPSentMessageInfo extends SMTPConnectionSendInfo, SentMessageInfo {
/** Envelope the message was sent with */
envelope: MimeNodeEnvelope;
/** Message-ID value of the sent message */
messageId: string;
/** Recipients the server accepted */
accepted: string[];
/** Recipients the server rejected */
rejected: string[];
}
/**
* Callback for send()
*/
export type SMTPTransportSendCallback = ResultCallback<SMTPSentMessageInfo>;
/**
* Creates a SMTP transport object for Nodemailer
*
* @constructor
* @param options Connection options
*/
declare class SMTPTransport extends EventEmitter {
options: SMTPTransportOptions;
logger: shared.Logger;
name: string;
version: string;
/**
* Transport level authentication data, set when the options include auth
*/
auth?: SMTPTransportAuth | false | undefined;
/**
* The Mail instance using this transport, assigned by Mail
*/
mailer?: Mail<SMTPSentMessageInfo> | undefined;
constructor(options?: SMTPTransportOptions | 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: SMTPTransportOptions, callback: SMTPTransportGetSocketCallback): void;
getAuth(authOpts?: SMTPTransportAuthOptions | false | null): SMTPTransportAuth | false | undefined;
/**
* Sends an e-mail using the selected settings
*
* @param mail Mail object
* @param callback Callback function
*/
send(mail: MailMessage, callback: SMTPTransportSendCallback): void;
/**
* Verifies SMTP configuration
*
* @param callback Callback function
*/
verify(): Promise<true>;
verify(callback: VerifyCallback): void;
/**
* Releases resources
*/
close(): void;
}
/**
* Type aliases in the layout of @types/nodemailer, so `SMTPTransport.Options` style references keep working
*/
declare namespace SMTPTransport {
type Options = SMTPTransportOptions;
type MailOptions = SendMailOptions;
type SentMessageInfo = SMTPSentMessageInfo;
type AuthenticationType = SMTPTransportAuth;
}
export default SMTPTransport;