Skip to main content

Mailer

@webda/mailer


Class: Mailer<T>

Defined in: mailer/src/mailer.service.ts:141

A Mailer based on the nodemailer module, rendering its templates with @webda/templates

Its parameters are the nodemailer createTransport options ( https://nodemailer.com/ )

Templates are rendered, in this order, by:

  1. a private renderer on templates if templates or templatesEngine is set on the mailer
  2. the templateService service (default TemplateService) if it exists
  3. a private renderer on ./templates

Webda Modda​

Extends​

  • AbstractMailer<T>

Type Parameters​

T​

T extends MailerParameters = MailerParameters

Constructors​

Constructor​

new Mailer<T>(name, params): Mailer<T>

Defined in: core/lib/services/service.d.ts:72

Service

Parameters​

name​

string

The name of the service

params​

T

The parameters block define in the configuration file

Returns​

Mailer<T>

Inherited from​

AbstractMailer<T>.constructor

Properties​

_compiledCapabilities​

protected _compiledCapabilities: Record<string, any>

Defined in: core/lib/services/iservice.d.ts:38

Capabilities detected at compile-time from @WebdaCapability-tagged interfaces.

Populated during Service.resolve by reading the service's entry in webda.module.json. Each key is a capability name (e.g., "request-filter"), and the value is an empty object {} by default. Override getCapabilities to provide capability-specific configuration or to conditionally disable capabilities.

See​

getCapabilities

Inherited from​

AbstractMailer._compiledCapabilities


_transporter​

_transporter: any

Defined in: mailer/src/mailer.service.ts:143

Nodemailer transport instance used to send emails


[WEBDA_EVENTS]​

[WEBDA_EVENTS]: object

Defined in: core/lib/services/service.d.ts:50

Set the Webda events here

Inherited from​

AbstractMailer.[WEBDA_EVENTS]


logger​

protected logger: Logger

Defined in: core/lib/services/service.d.ts:59

Logger with class context

Inherited from​

AbstractMailer.logger


metrics​

metrics: object

Defined in: core/lib/services/abstractmailer.d.ts:94

Mailer metrics for tracking sent emails and errors

errors​

errors: Counter

sent​

sent: Counter

Inherited from​

AbstractMailer.metrics


name​

readonly name: string

Defined in: core/lib/services/iservice.d.ts:18

Inherited from​

AbstractMailer.name


parameters​

readonly parameters: T

Defined in: core/lib/services/iservice.d.ts:19

Inherited from​

AbstractMailer.parameters


templatesSource?​

protected optional templatesSource?: MailerTemplates

Defined in: mailer/src/mailer.service.ts:145

Resolved templates source, lazily computed


createConfiguration?​

static optional createConfiguration?: (params) => any

Defined in: core/lib/services/iservice.d.ts:23

Create configuration set by the application on load

Parameters​

params​

any

Returns​

any

Inherited from​

AbstractMailer.createConfiguration


filterConfiguration?​

static optional filterConfiguration?: (params) => any

Defined in: core/lib/services/iservice.d.ts:27

Create configuration set by the application on load

Parameters​

params​

any

Returns​

any

Inherited from​

AbstractMailer.filterConfiguration


Parameters​

static Parameters: typeof ServiceParameters

Defined in: core/lib/services/service.d.ts:46

Service parameters

Inherited from​

AbstractMailer.Parameters

Methods​

__clean()​

abstract __clean(): Promise<void>

Defined in: core/lib/services/service.d.ts:215

Clean the service data, can only be used in test mode

Returns​

Promise<void>

Inherited from​

AbstractMailer.__clean


addListener()​

addListener<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:80

Type Parameters​

Key​

Key extends never

Parameters​

eventName​

Key

the event name

listener​

(event) => void | Promise<void>

the event listener

Returns​

this

this for chaining

See​

EventEmitter.addListener

Inherited from​

AbstractMailer.addListener


addRoute()​

protected addRoute(url, methods, executer, openapi?, override?): void

Defined in: core/lib/services/service.d.ts:177

Add a route dynamicaly

Parameters​

url​

string

of the route can contains dynamic part like {uuid}

methods​

HttpMethodType[]

the HTTP methods

executer​

Function

Method to execute for this route

openapi?​

OpenAPIWebdaDefinition

the OpenAPI specification

override?​

boolean

whether to override existing

Returns​

void

Inherited from​

AbstractMailer.addRoute


authorizeClientEvent()​

authorizeClientEvent(_event, _context): boolean

Defined in: core/lib/services/service.d.ts:153

Authorize a public event subscription

Parameters​

_event​

string

the event name

_context​

OperationContext

the execution context

Returns​

boolean

true if the condition is met

Inherited from​

AbstractMailer.authorizeClientEvent


computeParameters()​

computeParameters(): void

Defined in: core/lib/services/service.d.ts:77

Used to compute or derivate input parameter to attribute

Returns​

void

Deprecated​

Inherited from​

AbstractMailer.computeParameters


emit()​

emit<Key>(event, data): Promise<void>

Defined in: core/lib/services/service.d.ts:204

Emit the event with data and wait for Promise to finish if listener returned a Promise

Type Parameters​

Key​

Key extends never

Parameters​

event​

Key

the event name

data​

object[Key]

the data to process

Returns​

Promise<void>

Inherited from​

AbstractMailer.emit


getCapabilities()​

getCapabilities(): Record<string, any>

Defined in: core/lib/services/iservice.d.ts:60

Return the capabilities of this service.

By default returns capabilities detected at compile-time from

Returns​

Record<string, any>

the result

Webda Capability-tagged​

interfaces in webda.module.json.

Override to disable capabilities based on configuration:

getCapabilities() {
const caps = super.getCapabilities();
if (!this.parameters.enabled) delete caps["request-filter"];
return caps;
}

Inherited from​

AbstractMailer.getCapabilities


getClientEvents()​

getClientEvents(): string[]

Defined in: core/lib/services/service.d.ts:144

Return the events that an external system can subscribe to

Returns​

string[]

the list of results

Inherited from​

AbstractMailer.getClientEvents


getMaxListeners()​

getMaxListeners(): number

Defined in: core/lib/events/asynceventemitter.d.ts:84

Returns​

number

Inherited from​

AbstractMailer.getMaxListeners


getMetric()​

getMetric<T>(type, configuration): T

Defined in: core/lib/services/service.d.ts:138

Add service name label

Type Parameters​

T​

T = Counter<string> | Gauge<string> | Histogram<string>

Parameters​

type​

CustomConstructor<T, [MetricConfiguration<T>]>

the type to look up

configuration​

MetricConfiguration<T>

the configuration

Returns​

T

the result

Inherited from​

AbstractMailer.getMetric


getName()​

getName(): string

Defined in: core/lib/services/service.d.ts:209

Get service name

Returns​

string

the result string

Inherited from​

AbstractMailer.getName


getOpenApiReplacements()​

getOpenApiReplacements(): any

Defined in: core/lib/services/service.d.ts:182

Return variables for replacement in openapi

Returns​

any

the result

Inherited from​

AbstractMailer.getOpenApiReplacements


getOperationId()​

getOperationId(id): string | undefined

Defined in: core/lib/services/service.d.ts:167

If undefined is returned it cancel the operation registration

Parameters​

id​

string

the identifier

Returns​

string | undefined

the result

Inherited from​

AbstractMailer.getOperationId


getParameters()​

getParameters(): T

Defined in: core/lib/services/service.d.ts:82

Get the service parameters

Returns​

T

the result

Inherited from​

AbstractMailer.getParameters


getService()​

getService<T>(name): ServicesMap[T]

Defined in: core/lib/services/service.d.ts:131

Get a service by name

Type Parameters​

T​

T extends keyof ServicesMap

Parameters​

name​

T

the name to use

Returns​

ServicesMap[T]

the result map

Deprecated​

Use useService, might reconsider

Inherited from​

AbstractMailer.getService


getState()​

getState(): ServiceStates

Defined in: core/lib/services/service.d.ts:55

Get the current state

Returns​

ServiceStates

the result

Inherited from​

AbstractMailer.getState


getTemplates()​

protected getTemplates(): MailerTemplates

Defined in: mailer/src/mailer.service.ts:181

Resolve the renderer used for the templates

Returns​

MailerTemplates

the renderer and the folder used as juice relativeTo


getUrl()​

getUrl(url, _methods): string

Defined in: core/lib/services/service.d.ts:161

Return the full path url based on parameters

Parameters​

url​

string

relative url to service

_methods​

HttpMethodType[]

in case we need filtering (like Store)

Returns​

string

absolute url or undefined if need to skip the Route

Inherited from​

AbstractMailer.getUrl


handleNotificationFor()​

handleNotificationFor(user): Promise<boolean>

Defined in: core/lib/services/abstractmailer.d.ts:116

Check if notifications can be delivered to a user via email

Parameters​

user​

User | Ident

User or Ident to check for email availability

Returns​

Promise<boolean>

true if the user has an email address

Inherited from​

AbstractMailer.handleNotificationFor


hasNotification()​

hasNotification(name, locale?): Promise<boolean>

Defined in: mailer/src/mailer.service.ts:215

Check if an email template exists

Parameters​

name​

string

Template name to check

locale?​

string

Locale to look for

Returns​

Promise<boolean>

true if the template exists, single or multi-part

Overrides​

AbstractMailer.hasNotification


init()​

init(): Promise<Mailer<T>>

Defined in: mailer/src/mailer.service.ts:164

Initialize the nodemailer transport from the service parameters

Returns​

Promise<Mailer<T>>

this instance after transport creation

Overrides​

AbstractMailer.init


initMetrics()​

initMetrics(): void

Defined in: core/lib/services/abstractmailer.d.ts:101

Returns​

void

Inherited from​

AbstractMailer.initMetrics


initOperations()​

initOperations(): void

Defined in: core/lib/services/service.d.ts:186

Init the operations from

Returns​

void

Operation​

decorators on this service

Inherited from​

AbstractMailer.initOperations


listeners()​

listeners(eventName): Function[]

Defined in: core/lib/events/asynceventemitter.d.ts:139

Get all listeners for an event

Parameters​

eventName​

never

the event name

Returns​

Function[]

the list of results

Inherited from​

AbstractMailer.listeners


loadCapabilities()​

protected loadCapabilities(): void

Defined in: core/lib/services/service.d.ts:120

Load capabilities from webda.module.json metadata into _compiledCapabilities.

Called during resolve after dependency injection. Reads the service's type name from parameters, looks it up in the application's module metadata (moddas or beans section), and populates _compiledCapabilities with an empty object for each declared capability name.

Fails silently if the application is not available (e.g., in unit tests where services are instantiated without a full application context).

Returns​

void

Example​

// If webda.module.json contains:
// { "moddas": { "MyApp/HawkService": { "capabilities": ["request-filter", "cors-filter"] } } }
// Then after resolve(), this.getCapabilities() returns:
// { "request-filter": {}, "cors-filter": {} }

See​

getCapabilities

Inherited from​

AbstractMailer.loadCapabilities


log()​

log(level, ...args): void

Defined in: core/lib/services/service.d.ts:226

Parameters​

level​

WorkerLogLevel

to log

args​

...any[]

additional arguments

Returns​

void

Inherited from​

AbstractMailer.log


off()​

off<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:116

Type Parameters​

Key​

Key extends never

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.off

Inherited from​

AbstractMailer.off


on()​

on<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:102

Type Parameters​

Key​

Key extends never

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.once

Inherited from​

AbstractMailer.on


once()​

once<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:95

Type Parameters​

Key​

Key extends never

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.once

Inherited from​

AbstractMailer.once


removeAllListeners()​

removeAllListeners<Key>(eventName?): this

Defined in: core/lib/events/asynceventemitter.d.ts:122

Type Parameters​

Key​

Key extends never

Parameters​

eventName?​

Key

the event name

Returns​

this

this for chaining

See​

EventEmitter.removeAllListeners

Inherited from​

AbstractMailer.removeAllListeners


removeListener()​

removeListener<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:109

Type Parameters​

Key​

Key extends never

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.removeListener

Inherited from​

AbstractMailer.removeListener


render()​

protected render(options): Promise<void>

Defined in: mailer/src/mailer.service.ts:225

Render a template into the subject, html and text of the email

Parameters​

options​

MailerSendOptions

the send options, updated in place

Returns​

Promise<void>

Throws​

Error "Unknown mail template" if the template is not a multi-part template


resolve()​

resolve(): this

Defined in: core/lib/services/service.d.ts:98

Resolve parameters and load metadata. @Route-declared routes are scanned and registered by Router.discoverRoutes(services) from Core.init() once every service has resolved — nothing to do per-service here.

Returns​

this

the result

Inherited from​

AbstractMailer.resolve


send()​

send(options, callback?): Promise<any>

Defined in: mailer/src/mailer.service.ts:278

Send an email using the configured nodemailer transport

If a template is specified in options, it is rendered with the provided replacements (plus a now Date) and the locale before sending. Falls back to parameters.sender if no from is provided.

Parameters​

options​

MailerSendOptions & SendMailOptions

Mail options including optional template and replacements

callback?​

undefined = undefined

Optional callback passed to nodemailer's sendMail

Returns​

Promise<any>

Promise resolving with the nodemailer send result

Throws​

Error if no transporter is configured or the template is unknown

Overrides​

AbstractMailer.send


sendNotification()​

sendNotification(user, notification, replacements): Promise<void>

Defined in: core/lib/services/abstractmailer.d.ts:129

Send a notification email to a user

Resolves the user's email, increments the sent metric, and delegates to send. Increments the error metric on failure.

Parameters​

user​

User | Ident

User or Ident to send the notification to

notification​

string

Template name for the notification

replacements​

any

Template variables for rendering

Returns​

Promise<void>

Throws​

Error if the user has no valid email address

Inherited from​

AbstractMailer.sendNotification


setMaxListeners()​

setMaxListeners(n): this

Defined in: core/lib/events/asynceventemitter.d.ts:88

Parameters​

n​

number

Returns​

this

Inherited from​

AbstractMailer.setMaxListeners


stop()​

stop(): Promise<void>

Defined in: core/lib/services/service.d.ts:86

Shutdown the current service if action need to be taken

Returns​

Promise<void>

Inherited from​

AbstractMailer.stop


toJSON()​

toJSON(): string

Defined in: core/lib/services/service.d.ts:191

Prevent service to be serialized

Returns​

string

the result

Inherited from​

AbstractMailer.toJSON


toString()​

toString(): string

Defined in: core/lib/services/service.d.ts:91

Return service representation

Returns​

string

the result

Inherited from​

AbstractMailer.toString