Lumail exposes an SMTP submission endpoint for tools that cannot call the HTTP API directly. It is intended for low-volume transactional email such as auth codes, magic links, password resets, and operational messages.

If you are setting this up for an organization, start with the [SMTP transactional email tutorial](/docs/tutorials/smtp-transactional-emails). It covers verified domains, API tokens, provider settings, and test sends.

For systems that support HTTP hooks, prefer [POST /api/v1/emails](/docs/api-reference/api-emails-send). The HTTP API has a clearer request/response model and is easier to debug. The SMTP endpoint exists for compatibility with SMTP-only providers.

Under the hood, the SMTP endpoint is a thin adapter: it authenticates with your Lumail API token, parses the SMTP/MIME message, then forwards the request to `POST /api/v1/emails`. The HTTP API remains responsible for token validation, verified sending-domain checks, quotas, and priority queueing.

## Connection Settings

| Setting  | Value                                              |
| -------- | -------------------------------------------------- |
| Host     | `smtp.lumail.io`                                   |
| Port     | `587`                                              |
| Security | STARTTLS                                           |
| Username | Any non-empty value, for example your org slug     |
| Password | A Lumail API token from **Settings -> API Tokens** |

The username is used as a log label. The password must be a Lumail API token. The `From` address must use a verified Lumail sending domain in the same organization as the API token.

## Priority

SMTP messages are treated as transactional by default. They are queued on Lumail's transactional priority QStash lane, separate from campaign and newsletter batches.

The default queue lane capacity is 40 emails per second for priority messages and 40 emails per second for bulk campaign messages. This separation prevents a large newsletter send from blocking OTP or magic-link delivery.

## Message Rules

| Rule        | Default                                                            |
| ----------- | ------------------------------------------------------------------ |
| Recipients  | 1 recipient per SMTP message                                       |
| Attachments | Rejected                                                           |
| Size limit  | 1 MB                                                               |
| Tracking    | Link and open tracking disabled by default                         |
| Content     | HTML is preserved when present; otherwise text is sent as Markdown |

## Supabase Auth

Supabase Auth can send email through a custom SMTP provider. Configure it with:

```text
Host: smtp.lumail.io
Port: 587
Security: STARTTLS
Username: your-org-slug
Password: lum_your_api_token
Sender email: auth@your-verified-domain.com
```

If you can use Supabase's Send Email hook instead, prefer the hook and call `POST /api/v1/emails` from your endpoint. It gives you structured errors and avoids SMTP parsing.

## SMTP Responses

| Response | Meaning                                     |
| -------- | ------------------------------------------- |
| `250`    | Message accepted and queued by Lumail       |
| `535`    | Invalid Lumail API token                    |
| `530`    | Authentication required                     |
| `550`    | Invalid sender, recipient, or message       |
| `552`    | Message too large or attachment rejected    |
| `452`    | Temporary queue, quota, or plan-limit issue |
| `451`    | Lumail API temporarily unavailable          |

Lumail returns `250` only after the transactional priority queue accepts the message.

## Related Documentation

- [SMTP Transactional Email Tutorial](/docs/tutorials/smtp-transactional-emails) - Configure SMTP for an organization
- [Create an API Token](/docs/tutorials/create-api-token) - Generate the SMTP password
- [Email Domains](/docs/domains/email-domains) - Verify the `From` domain
