@types/nodemailer
Version:
TypeScript definitions for nodemailer
275 lines (237 loc) • 14.2 kB
TypeScript
/// <reference types="node" />
import { EventEmitter } from "events";
import { Socket } from "net";
import { Readable } from "stream";
import { Url } from "url";
import { Transport, TransportOptions } from "../..";
import * as shared from "../shared";
import DKIM = require("../dkim");
import MailMessage = require("./mail-message");
import MimeNode = require("../mime-node");
import SMTPConnection = require("../smtp-connection");
import XOAuth2 = require("../xoauth2");
declare namespace Mail {
type Headers =
| { [key: string]: string | string[] | { prepared: boolean; value: string } }
| Array<{ key: string; value: string }>;
type ListHeader = string | { url: string; comment: string };
interface ListHeaders {
[key: string]: ListHeader | ListHeader[] | ListHeader[][];
}
type TextEncoding = "quoted-printable" | "base64";
interface Address {
name: string;
address: string;
}
interface AttachmentLike {
/** String, Buffer or a Stream contents for the attachment */
content?: string | Buffer | Readable | undefined;
/** path to a file or an URL (data uris are allowed as well) if you want to stream the file instead of including it (better for larger attachments) */
path?: string | Url | undefined;
}
interface Attachment extends AttachmentLike {
/** filename to be reported as the name of the attached file, use of unicode is allowed. If you do not want to use a filename, set this value as false, otherwise a filename is generated automatically */
filename?: string | false | undefined;
/** optional content id for using inline images in HTML message source. Using cid sets the default contentDisposition to 'inline' and moves the attachment into a multipart/related mime node, so use it only if you actually want to use this attachment as an embedded image */
cid?: string | undefined;
/** If set and content is string, then encodes the content to a Buffer using the specified encoding. Example values: base64, hex, binary etc. Useful if you want to use binary attachments in a JSON formatted e-mail object */
encoding?: string | undefined;
/** optional content type for the attachment, if not set will be derived from the filename property */
contentType?: string | undefined;
/** optional transfer encoding for the attachment, if not set it will be derived from the contentType property. Example values: quoted-printable, base64. If it is unset then base64 encoding is used for the attachment. If it is set to false then previous default applies (base64 for most, 7bit for text). */
contentTransferEncoding?: "7bit" | "base64" | "quoted-printable" | false | undefined;
/** optional content disposition type for the attachment, defaults to ‘attachment’ */
contentDisposition?: "attachment" | "inline" | undefined;
/** is an object of additional headers */
headers?: Headers | undefined;
/** an optional value that overrides entire node content in the mime message. If used then all other options set for this node are ignored. */
raw?: string | Buffer | Readable | AttachmentLike | undefined;
}
interface AmpAttachment extends AttachmentLike {
/** is an alternative for content to load the AMP4EMAIL data from an URL */
href?: string | undefined;
/** defines optional content encoding, eg. ‘base64’ or ‘hex’. This only applies if the content is a string. By default an unicode string is assumed. */
encoding?: string | undefined;
/** optional content type for the attachment, if not set will be derived from the filename property */
contentType?: string | undefined;
/** an optional value that overrides entire node content in the mime message. If used then all other options set for this node are ignored. */
raw?: string | Buffer | Readable | AttachmentLike | undefined;
}
interface IcalAttachment extends AttachmentLike {
/** optional method, case insensitive, defaults to ‘publish’. Other possible values would be ‘request’, ‘reply’, ‘cancel’ or any other valid calendar method listed in RFC5546. This should match the METHOD: value in calendar event file. */
method?: string | undefined;
/** optional filename, defaults to ‘invite.ics’ */
filename?: string | false | undefined;
/** is an alternative for content to load the calendar data from an URL */
href?: string | undefined;
/** defines optional content encoding, eg. ‘base64’ or ‘hex’. This only applies if the content is a string. By default an unicode string is assumed. */
encoding?: string | undefined;
}
interface Connection {
connection: Socket;
}
interface Envelope {
/** the first address gets used as MAIL FROM address in SMTP */
from?: string | undefined;
/** addresses from this value get added to RCPT TO list */
to?: string | undefined;
/** addresses from this value get added to RCPT TO list */
cc?: string | undefined;
/** addresses from this value get added to RCPT TO list */
bcc?: string | undefined;
}
interface Options {
/** The e-mail address of the sender. All e-mail addresses can be plain 'sender@server.com' or formatted 'Sender Name <sender@server.com>' */
from?: string | Address | undefined;
/** An e-mail address that will appear on the Sender: field */
sender?: string | Address | undefined;
/** Comma separated list or an array of recipients e-mail addresses that will appear on the To: field */
to?: string | Address | Array<string | Address> | undefined;
/** Comma separated list or an array of recipients e-mail addresses that will appear on the Cc: field */
cc?: string | Address | Array<string | Address> | undefined;
/** Comma separated list or an array of recipients e-mail addresses that will appear on the Bcc: field */
bcc?: string | Address | Array<string | Address> | undefined;
/** Comma separated list or an array of e-mail addresses that will appear on the Reply-To: field */
replyTo?: string | Address | Array<string | Address> | undefined;
/** The message-id this message is replying */
inReplyTo?: string | Address | undefined;
/** Message-id list (an array or space separated string) */
references?: string | string[] | undefined;
/** The subject of the e-mail */
subject?: string | undefined;
/** The plaintext version of the message */
text?: string | Buffer | Readable | AttachmentLike | undefined;
/** The HTML version of the message */
html?: string | Buffer | Readable | AttachmentLike | undefined;
/** Apple Watch specific HTML version of the message, same usage as with text and html */
watchHtml?: string | Buffer | Readable | AttachmentLike | undefined;
/** AMP4EMAIL specific HTML version of the message, same usage as with text and html. Make sure it is a full and valid AMP4EMAIL document, otherwise the displaying email client falls back to html and ignores the amp part */
amp?: string | Buffer | Readable | AmpAttachment | undefined;
/** iCalendar event, same usage as with text and html. Event method attribute defaults to ‘PUBLISH’ or define it yourself: {method: 'REQUEST', content: iCalString}. This value is added as an additional alternative to html or text. Only utf-8 content is allowed */
icalEvent?: string | Buffer | Readable | IcalAttachment | undefined;
/** An object or array of additional header fields */
headers?: Headers | undefined;
/** An object where key names are converted into list headers. List key help becomes List-Help header etc. */
list?: ListHeaders | undefined;
/** An array of attachment objects */
attachments?: Attachment[] | undefined;
/** An array of alternative text contents (in addition to text and html parts) */
alternatives?: Attachment[] | undefined;
/** optional SMTP envelope, if auto generated envelope is not suitable */
envelope?: Envelope | MimeNode.Envelope | undefined;
/** optional Message-Id value, random value will be generated if not set */
messageId?: string | undefined;
/** optional Date value, current UTC string will be used if not set */
date?: Date | string | undefined;
/** optional transfer encoding for the textual parts */
encoding?: string | undefined;
/** if set then overwrites entire message output with this value. The value is not parsed, so you should still set address headers or the envelope value for the message to work */
raw?: string | Buffer | Readable | AttachmentLike | undefined;
/** set explicitly which encoding to use for text parts (quoted-printable or base64). If not set then encoding is detected from text content (mostly ascii means quoted-printable, otherwise base64) */
textEncoding?: TextEncoding | undefined;
/** if set to true then fails with an error when a node tries to load content from URL */
disableUrlAccess?: boolean | undefined;
/** if set to true then fails with an error when a node tries to load content from a file */
disableFileAccess?: boolean | undefined;
/** is an object with DKIM options */
dkim?: DKIM.Options | undefined;
/** method to normalize header keys for custom caseing */
normalizeHeaderKey?(key: string): string;
priority?: "high" | "normal" | "low" | undefined;
/** if set to true then converts data:images in the HTML content of message to embedded attachments */
attachDataUrls?: boolean | undefined;
}
type PluginFunction<T = any> = (mail: MailMessage<T>, callback: (err?: Error | null) => void) => void;
}
/** Creates an object for exposing the Mail API */
declare class Mail<T = any, DefaultTransportOptions = TransportOptions> extends EventEmitter {
options: Mail.Options;
meta: Map<string, any>;
dkim: DKIM;
transporter: Transport<T>;
logger: shared.Logger;
/** Usage: typeof transporter.MailMessage */
MailMessage: MailMessage<T>;
_defaults: DefaultTransportOptions;
constructor(transporter: Transport<T>, options?: TransportOptions, defaults?: DefaultTransportOptions);
/** 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 */
verify(callback: (err: Error | null, success: true) => void): void;
verify(): Promise<true>;
use(step: string, plugin: Mail.PluginFunction<T>): this;
/** Sends an email using the preselected transport object */
sendMail(mailOptions: Mail.Options, callback: (err: Error | null, info: T) => void): void;
sendMail(mailOptions: Mail.Options): Promise<T>;
getVersionString(): string;
/** Sets up proxy handler for a Nodemailer object */
setupProxy(proxyUrl: string): void;
set(
key: "oauth2_provision_cb",
value: (
user: string,
renew: boolean,
callback: (err: Error | null, accessToken?: string, expires?: number) => void,
) => void,
): Map<string, any>;
set(
key:
| "proxy_handler_http"
| "proxy_handler_https"
| "proxy_handler_socks"
| "proxy_handler_socks5"
| "proxy_handler_socks4"
| "proxy_handler_socks4a",
value: (
proxy: Url,
options: TransportOptions,
callback: (err: Error | null, socketOptions?: { connection: Socket }) => void,
) => void,
): Map<string, any>;
set(key: string, value: any): Map<string, any>;
get(
key: "oauth2_provision_cb",
): (
user: string,
renew: boolean,
callback: (err: Error | null, accessToken: string, expires: number) => void,
) => void;
get(
key:
| "proxy_handler_http"
| "proxy_handler_https"
| "proxy_handler_socks"
| "proxy_handler_socks5"
| "proxy_handler_socks4"
| "proxy_handler_socks4a",
): (
proxy: Url,
options: TransportOptions,
callback: (err: Error | null, socketOptions: { connection: Socket }) => void,
) => void;
get(key: string): any;
addListener(event: "error", listener: (err: Error) => void): this;
addListener(event: "idle", listener: () => void): this;
addListener(event: "token", listener: (token: XOAuth2.Token) => void): this;
emit(event: "error", error: Error): boolean;
emit(event: "idle"): boolean;
emit(event: "token", token: XOAuth2.Token): boolean;
on(event: "error", listener: (err: Error) => void): this;
on(event: "idle", listener: () => void): this;
on(event: "token", listener: (token: XOAuth2.Token) => void): this;
once(event: "error", listener: (err: Error) => void): this;
once(event: "idle", listener: () => void): this;
once(event: "token", listener: (token: XOAuth2.Token) => void): this;
prependListener(event: "error", listener: (err: Error) => void): this;
prependListener(event: "idle", listener: () => void): this;
prependListener(event: "end", listener: (token: XOAuth2.Token) => void): this;
prependOnceListener(event: "error", listener: (err: Error) => void): this;
prependOnceListener(event: "idle", listener: () => void): this;
prependOnceListener(event: "end", listener: (token: XOAuth2.Token) => void): this;
listeners(event: "error"): Array<(err: Error) => void>;
listeners(event: "idle"): Array<() => void>;
listeners(event: "end"): Array<(token: XOAuth2.Token) => void>;
}
export = Mail;