> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Email provider configuration

Configure transactional delivery and verify its independent outcome.

## Setup and configuration

Before any step, read [Before you start](https://supastack.dev/docs/web/before-you-start.md) and [Terminal basics](https://supastack.dev/docs/web/terminal-basics.md). These instructions assume you opened the full supastack monorepo in VS Code; its root package.json marks the repository root. In pnpm commands, a workspace package is an app or shared-code folder; in the product, a workspace is a team's data container and security boundary. corepack pnpm --filter ... selects one package from the monorepo while commands run from its root. If you opened only a synced mobile or desktop folder, it does not contain the Web backend, Docker setup, or root scripts: run the backend from this monorepo or a reachable hosted server, and use the platform folder's own scripts. An environment variable is a named setting stored in a local .env file or your hosting dashboard; restart the relevant app after changing it, and keep server secrets out of NEXT_PUBLIC_ and EXPO_PUBLIC_ values.

1. Open apps/web/.env.local and set EMAIL_PROVIDER=local for development; EMAIL_FROM is the sender label used by templates.

2. Start the Web app from the repository root with corepack pnpm --filter @supastack/web dev and trigger one sign-in or invite flow with a test address. Expected: the app records a local email outcome without contacting a real provider. Only connect Resend, SES, or another service after its sender domain is verified and test recipients are restricted.

EMAIL_PROVIDER=local keeps deterministic delivery local. For configured production delivery, review the Resend or SES adapter and provide its server credentials. EMAIL_FROM must match the identity verified with the selected provider.

```
EMAIL_PROVIDER=local
EMAIL_FROM=supastack <hello@example.test>
# Production adapter configuration is listed in .env.example.
```


## Commands to copy

Follow the comments to see which folder a command runs in. If two terminals are labeled, open two terminal windows and keep the first command running while you use the second.

```
corepack pnpm --filter @supastack/web dev
```


## Implementation workflow

Authentication and completion messages use the transactional email boundary. Outreach workflows belong to the consuming product and remain separate. Never reuse this path as an unreviewed bulk messaging subsystem.

Record delivery separately from generation. A model result can be available while its completion message fails. Recovery must inspect delivery state instead of generating the same result again.


## Verification and troubleshooting

If no local email appears, check that EMAIL_PROVIDER is set in apps/web/.env.local and restart Web. If a real provider rejects a message, confirm EMAIL_FROM matches a verified sender and inspect the provider's delivery record. A generated AI answer can succeed even when its follow-up email fails; check delivery before running the AI task again.

Verify recipient restrictions, sender identity, and provider errors in a dedicated test environment. A local adapter result is not evidence of real email delivery. The opt-in smoke path restricts recipients through REAL_SMOKE_EMAIL_ALLOWED_DOMAIN.


## Next

[Audit, analytics and errors](https://supastack.dev/docs/modules/observability.md)
