# Postal SMTP Setup

Use Postal as the long-term outbound email backend for `platform-service`.

## Architecture

`platform-service` owns:

- email templates
- auth-triggered email events
- delivery logs
- SMTP submission

Postal owns:

- SMTP/API delivery
- outbound queueing
- bounce and reputation handling
- domain signing and mail-server operations

`platform-service` should talk to Postal over SMTP. No separate ByteLyst email relay is needed.

## Environment

Set these variables for `platform-service`:

```env
EMAIL_PROVIDER=smtp
EMAIL_FROM_ADDRESS=noreply@your-domain.com
EMAIL_FROM_NAME=ByteLyst
SMTP_HOST=postal.your-domain.internal
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=your-postal-smtp-username
SMTP_PASSWORD=your-postal-smtp-password
```

Use `SMTP_SECURE=true` only if your Postal endpoint expects implicit TLS, typically on port `465`.

## Postal Mapping

Create one SMTP credential in Postal for the sender/server you want `platform-service` to use.

Map the values like this:

- `SMTP_HOST`: Postal SMTP host
- `SMTP_PORT`: Postal submission port
- `SMTP_USER`: Postal SMTP username
- `SMTP_PASSWORD`: Postal SMTP password
- `EMAIL_FROM_ADDRESS`: verified sender address or domain-backed sender

## Operational Notes

- Keep `EMAIL_PROVIDER=console` for local development if you do not want real delivery.
- Use a local SMTP catcher such as Mailpit only for development inbox inspection.
- For production, Postal still requires DNS and mail operations outside this repo: SPF, DKIM, DMARC, reverse DNS, and clean outbound IP reputation.

## Current Repo Wiring

The SMTP delivery path is implemented in:

- `src/modules/delivery/channels/email.ts`
- `src/modules/delivery/dispatcher.ts`
- `src/modules/delivery/subscribers.ts`
- `src/server.ts`

Auth-driven flows such as password reset and email verification now depend on the delivery subscribers being registered at service startup.
