Upgrading @nestjs-modules/mailer from 3.x to 4.x
Comparison of the public API of @nestjs-modules/mailer 3.0.2 and 4.0.0, computed automatically from their TypeScript types. A changed signature is a candidate for a breaking change, not a certainty.
Summary
| Removed import paths | 0 |
|---|---|
| Removed exports | 0 |
| Changed signatures | 0 |
| Removed class or interface members | 1 |
| Changed class or interface members | 3 |
| Newly deprecated | 0 |
| Requirement changes (engines, peer dependencies) | 3 |
| New exports | 64 |
Removed exports
None detected.
Changed signatures
None detected.
Removed class or interface members
| member | import | Before |
|---|---|---|
MailerService.executeSend | @nestjs-modules/mailer | any |
Changed class or interface members
| member | Before | After |
|---|---|---|
MailerService.constructor | (mailerOptions: MailerOptions, transportFactory: MailerTransportFactory, eventService?: MailerEventService | undefined): MailerService | (mailerOptions: MailerOptions, transportFactory?: MailerTransportFactory | undefined, eventService?: MailerEventService | undefined, moduleRef?: any): MailerService |
MailerTestModule.static register | (options?: Partial<{ template: { dir?: string | undefined; adapter?: any; options?: any; }; }> | undefined): DynamicModule | (options?: Omit<MailerOptions, "transport" | "transports"> | undefined): DynamicModule |
MailerEventService.constructor | (eventEmitter?: any): MailerEventService | (eventEmitter?: MailerEventEmitter | undefined, moduleRef?: any): MailerEventService |
Newly deprecated
None detected.
Requirement changes (engines, peer dependencies)
| Before | After | |
|---|---|---|
peerDependencies.handlebars | >=4.7.9 | >=4.7.10 |
peerDependencies.@nestjs/mail | — | >=0.0.1 |
peerDependencies.@nestjs/outbox | — | >=0.1.3 |
New exports (64)
| import | export | kind |
|---|---|---|
@nestjs-modules/mailer | html | function |
@nestjs-modules/mailer | signV4 | function |
@nestjs-modules/mailer | Mailable | interface |
@nestjs-modules/mailer | SafeHtml | class |
@nestjs-modules/mailer | MailQuery | interface |
@nestjs-modules/mailer | htmlToText | function |
@nestjs-modules/mailer | isSafeHtml | function |
@nestjs-modules/mailer | unsafeHtml | function |
@nestjs-modules/mailer | MailerError | class |
@nestjs-modules/mailer | TestMailbox | class |
@nestjs-modules/mailer | CapturedMail | class |
@nestjs-modules/mailer | LogTransport | class |
@nestjs-modules/mailer | MailableData | type |
@nestjs-modules/mailer | RenderedMail | interface |
@nestjs-modules/mailer | SesTransport | class |
@nestjs-modules/mailer | SigV4Options | interface |
@nestjs-modules/mailer | SigV4Request | interface |
@nestjs-modules/mailer | FileTransport | class |
@nestjs-modules/mailer | MailerPreview | type |
@nestjs-modules/mailer | toMailerError | function |
@nestjs-modules/mailer | AwsCredentials | interface |
@nestjs-modules/mailer | BrevoTransport | class |
@nestjs-modules/mailer | SigV4Signature | interface |
@nestjs-modules/mailer | LOCAL_TRANSPORT | variable |
@nestjs-modules/mailer | MailableContent | type |
@nestjs-modules/mailer | MailableContext | interface |
@nestjs-modules/mailer | MailerSmtpError | class |
@nestjs-modules/mailer | ResendTransport | class |
@nestjs-modules/mailer | parseRetryAfter | function |
@nestjs-modules/mailer | validateMessage | function |
@nestjs-modules/mailer | InterceptOptions | interface |
@nestjs-modules/mailer | MailgunTransport | class |
@nestjs-modules/mailer | isTransientError | function |
@nestjs-modules/mailer | MailerEventRecord | interface |
@nestjs-modules/mailer | PostmarkTransport | class |
@nestjs-modules/mailer | SendGridTransport | class |
@nestjs-modules/mailer | mailerChannelName | function |
@nestjs-modules/mailer | MailerEventEmitter | interface |
@nestjs-modules/mailer | MailerMessageError | class |
@nestjs-modules/mailer | MailerRetryOptions | interface |
@nestjs-modules/mailer | MailerTimeoutError | class |
@nestjs-modules/mailer | UnsubscribeOptions | interface |
@nestjs-modules/mailer | HttpSentMessageInfo | interface |
@nestjs-modules/mailer | LogTransportOptions | interface |
@nestjs-modules/mailer | MailableSendOptions | type |
@nestjs-modules/mailer | MailerPreviewModule | class |
@nestjs-modules/mailer | MailerProviderError | class |
@nestjs-modules/mailer | MailerTemplateError | class |
@nestjs-modules/mailer | SesTransportOptions | interface |
@nestjs-modules/mailer | FileTransportOptions | interface |
@nestjs-modules/mailer | HttpTransportOptions | interface |
@nestjs-modules/mailer | MAILER_EVENT_EMITTER | variable |
@nestjs-modules/mailer | MailerPreviewOptions | interface |
@nestjs-modules/mailer | mayHaveBeenDelivered | function |
@nestjs-modules/mailer | BrevoTransportOptions | interface |
@nestjs-modules/mailer | HttpProviderTransport | class |
@nestjs-modules/mailer | MailerConnectionError | class |
@nestjs-modules/mailer | SuppressedMessageInfo | interface |
@nestjs-modules/mailer | MAILER_PREVIEW_OPTIONS | variable |
@nestjs-modules/mailer | ResendTransportOptions | interface |
@nestjs-modules/mailer | MailgunTransportOptions | interface |
@nestjs-modules/mailer | PostmarkTransportOptions | interface |
@nestjs-modules/mailer | SendGridTransportOptions | interface |
@nestjs-modules/mailer | MailerRecipientsRejectedError | class |
Changelog between these versions
Text published by the package authors, shown as-is.
4.0.0
### Major Changes
- [#1353](https://github.com/nest-modules/mailer/pull/1353) [`c8c0423`](https://github.com/nest-modules/mailer/commit/c8c0423749bd8f0f7d0f247e62ee5ab7a55f6535) Thanks [@juandav](https://github.com/juandav)! - v4: everything the official `@nestjs/mail` offers and more, without dropping anything v3 supports. Every capability is optional: use nodemailer, the built-in HTTP providers or `@nestjs/mail`'s transports; send directly, through BullMQ or through `@nestjs/outbox`; call `sendMail`, mail classes or the official `Mailer` over this module.
**Breaking changes** (see the [migration guide](https://nest-modules.github.io/mailer/guide/migration)):
- Transient failures are retried by default (3 attempts with backoff); `retry: false` restores v3. A timeout or a dropped connection while the message was being handed over is retried only when the email has a stable Message-ID (`idempotencyKey`), so nothing is sent twice. `sendTimeout` applies per attempt.
- Errors from transports are typed (`MailerSmtpError`, `MailerTimeoutError`, … all `MailerError`), keeping nodemailer's fields and the original as `cause`; `wrapErrors: false` restores v3.
- Emails without a text part get one derived from the HTML (`textFromHtml: false` to opt out), and messages are validated before sending (`validate: false` to opt out).
- `MailerTestModule` delivers to a `TestMailbox` (no stream transport; `info.message` uses CRLF line endings) and defaults `retry` to `false`.
- `MailerPreviewModule` is on by default only when `NODE_ENV` is `development` or `test`.
- Event payloads carry `attempt`, `permanent`, `transporterName` and `durationMs`; `MailerEventService` takes its emitter through `MAILER_EVENT_EMITTER`, and `EventEmitter2` is found automatically (in v3 it was never injected).
- `MailableContext.to` is `{ name?, address }[]`, the same shape as `@nestjs/mail`.
**New**
- Mail classes (`mailerService.send(WelcomeMail, { to, data })`) compatible with `@nestjs/mail`'s, with dependencies resolved from the whole app, and `render()` to render without sending.
- Retries with backoff and error classification (nodemailer, HTTP and AWS SDK errors), failover between transporters, `AbortSignal`, `idempotencyKey`, and graceful shutdown that waits for sends in flight (`shutdownTimeout`).
- Zero-dependency HTTP transports: Resend, Postmark, SendGrid, SES (SigV4), Mailgun and Brevo.
- The `html` tagged template (`unsafeHtml()` for trusted markup), `htmlToText()` and message validation.
- `intercept` (redirect recipients in staging), `suppress` (suppression lists) and one-click `unsubscribe` (RFC 8058).
- `TestMailbox` with assertions, `FileTransport` and `LogTransport` (with a warning when used in production) and `MailerPreviewModule` to preview emails in the browser.
- `events$`, `node:diagnostics_channel` publishing (credentials redacted), and `RETRY`, `FAILOVER` and `SUPPRESSED` events.
- BullMQ: permanent failures fail the jGive your AI agent these facts
Vigia is a free MCP server: your coding agent checks versions, breaking changes and vulnerabilities before it writes code. No signup, no API key.
claude mcp add --transport http vigia https://vigia.coredls.cloud/mcp
Add to CursorAdd to VS Code★ Star on GitHub
Any other MCP client
{ "mcpServers": { "vigia": { "url": "https://vigia.coredls.cloud/mcp" } } }Agent skill (SKILL.md): tells the agent when to use Vigia · GitHub Action for pull requests
Frequently asked questions
What are the breaking changes when upgrading @nestjs-modules/mailer from 3 to 4?
Between @nestjs-modules/mailer 3.0.2 and 4.0.0, Vigia found 0 removed exports, 0 changed signatures and 4 removed or changed class or interface members.
What became deprecated in @nestjs-modules/mailer 4?
0 exports or members are newly marked as deprecated in @nestjs-modules/mailer 4.0.0.
For agents
GET https://vigia.coredls.cloud/v1/packages/npm/@nestjs-modules/mailer/upgrade?from=3.0.2&to=4.0.0