@anarchitects/common-nest-mailer
v2.0.0
Published
Shared typed mailer configuration, transport setup, and provider wiring for NestJS apps.
Readme
@anarchitects/common-nest-mailer
Shared typed mailer configuration, transport setup, and provider wiring for NestJS apps.
What It Exports
mailerConfig:registerAs(...)config namespace for@nestjs/configMailerConfig: inferred config type (ConfigType<typeof mailerConfig>)InjectMailerConfig(): decorator helper for injecting config valuesCommonMailerProvider: provider mode union ('node' | 'noop')CommonMailerModuleOptions: provider wiring options (provider?: CommonMailerProvider)CommonMailerModule.forRoot(options?): provider wiring (MailerPort -> NodeMailerAdapter|NoopMailerAdapter)CommonMailerModule.forProviderFromConfig(overrides?): config-driven provider wiring fromMAILER_PROVIDERCommonMailerModule.forRootFromConfig(): config-driven root mail transport setupCommonMailerModule.forRootAsync(...): pass-through setup for custom transportsMailerPort: shared mailer port token/contract for domain adaptersNodeMailerAdapter: shared concrete adapter using NestMailerServiceNoopMailerAdapter: shared no-op implementation
Environment Variables
MAILER_PROVIDER=node
MAILER_HOST=smtp.example.com
MAILER_PORT=587
MAILER_SECURE=false
[email protected]
MAILER_PASS=super-secret
[email protected]
MAILER_IGNORE_TLS=false
MAILER_TEMPLATE_DIR=templatesUsage (Preferred)
Configure mail transport once at app root, then let domain mailer modules consume MailerService.
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { CommonMailerModule, mailerConfig } from '@anarchitects/common-nest-mailer';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [mailerConfig],
}),
CommonMailerModule.forRootFromConfig(),
CommonMailerModule.forProviderFromConfig(),
],
})
export class AppModule {}Explicit Provider Wiring
import { Module } from '@nestjs/common';
import { CommonMailerModule } from '@anarchitects/common-nest-mailer';
@Module({
imports: [CommonMailerModule.forRoot({ provider: 'noop' })],
})
export class AppModule {}Custom Transport Setup
import { Module } from '@nestjs/common';
import { CommonMailerModule } from '@anarchitects/common-nest-mailer';
@Module({
imports: [
CommonMailerModule.forRootAsync({
useFactory: () => ({
transport: { jsonTransport: true },
defaults: { from: '[email protected]' },
template: { dir: 'templates' },
}),
}),
],
})
export class AppModule {}Injecting Typed Config
import { Injectable } from '@nestjs/common';
import { InjectMailerConfig, MailerConfig } from '@anarchitects/common-nest-mailer';
@Injectable()
export class MailerSetupService {
constructor(@InjectMailerConfig() private readonly config: MailerConfig) {}
}License
Released under the Apache License 2.0.
