send and queue calls are logged, and CRM methods always return success without calling a provider.
tools.mailer.from is { email, name } for Local (localSchema in apps/shared/src/mailer/schema.ts), same as Brevo and SendGrid in config; Brevo resolves a numeric sender id at runtime — see Brevo.
Why
Use Local for safe development and tests where you want deterministic behavior without outbound email or CRM API traffic.Setup
- Ensure
apps/backend/package.jsonincludes:
- Run workspace install/build updates:
- Configure
tools.mailerinapps/backend/src/configuration/development.ts(andtest.ts):
- No provider env vars are required for Local.
- Verify:
Local observability
Local logs all mailer operations through the app logger, so you can inspect queued payloads and CRM method calls in backend logs without any external dashboard.Adding a new mail list tag
- Add the tag in
apps/shared/src/mailer/types.tsunderMailListTags. - Ensure
apps/shared/src/mailer/schema.tsstill validates that every tag has alistIdByTagmapping. - Add/update config mappings in
apps/backend/src/configuration/development.tsandapps/backend/src/configuration/test.ts. - Add test coverage in
apps/shared/__tests__/mailerConfigSchema.spec.ts. - Run:
Gotchas
- Local CRM methods return success by design and do not persist records.
- Queue payloads still target
email_v1, so queue consumers must stay registered. - Missing
listIdByTagmappings fail configuration validation even in Local mode.
