> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mailbreeze.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Limits & Behaviour

> Message size, recipients, headers, and how MailBreeze handles To, Cc, and Bcc over SMTP

## Limits

| Limit                                 | Value                        |
| ------------------------------------- | ---------------------------- |
| Maximum message size                  | 25 MB, including attachments |
| Recipients per message                | 50 across To, Cc, and Bcc    |
| Messages per connection               | 100                          |
| Concurrent connections per IP         | 10                           |
| Failed authentications before lockout | 10 in 15 minutes             |

Exceeding the recipient cap rejects the additional recipients and delivers to the ones already accepted, rather than failing the whole message.

## Recipients

The envelope determines delivery; headers determine what recipients see.

* Addresses in the `To` header are delivered to and shown as To.
* Addresses in the `Cc` header are delivered to and shown as Cc.
* Envelope recipients that appear in neither header are treated as **Bcc** and are never written into any header.

A recipient rejected during the SMTP conversation is not delivered to, even if it still appears in a header.

<Warning>
  Every message needs at least one To or Cc recipient. Bcc-only messages are rejected:

  ```
  550 At least one To or Cc recipient is required; Bcc-only messages are not accepted
  ```

  To send to a group privately, address the message to yourself in `To` and put the group in `Bcc`.
</Warning>

## Headers

MailBreeze generates the headers that identify and authenticate a message: `Message-ID`, `Date`, `DKIM-Signature`, `Return-Path`, `Feedback-ID`, and the unsubscribe headers. Any copy you supply is replaced.

**Preserved from your message:**

| Header        | Purpose                                          |
| ------------- | ------------------------------------------------ |
| `In-Reply-To` | Keeps replies threaded in the recipient's client |
| `References`  | Keeps replies threaded in the recipient's client |
| `X-*`         | Your own custom headers                          |

Headers outside that list are removed. This includes `Errors-To`, `Return-Receipt-To`, `Sender`, `Precedence`, `Auto-Submitted`, and `List-Unsubscribe`, which would otherwise interfere with bounce processing and deliverability.

The `X-MB-*` prefix is reserved for MailBreeze and is stripped from incoming messages.

## Tracking

Open and click tracking are enabled by default, matching the API. Disable either per message with a header:

```
X-MB-Track-Opens: false
X-MB-Track-Clicks: false
```

These two headers are read and then removed, so they never reach the recipient.

## Idempotency

If your client supplies a `Message-ID`, MailBreeze uses it to deduplicate for 24 hours. A message retried after a temporary failure is delivered and billed once, and both attempts return the same message ID.

Clients that generate a fresh `Message-ID` per attempt cannot be deduplicated, so retries will send twice.

## What SMTP cannot do

These features are API-only:

<CardGroup cols={2}>
  <Card title="Templates" icon="file-code">
    Server-side rendering with `templateId` and variables.
  </Card>

  <Card title="Stored attachments" icon="paperclip">
    Referencing previously uploaded attachments by ID. Attach files to the message instead.
  </Card>

  <Card title="Marketing sends" icon="bullhorn">
    Campaigns and list sends. SMTP messages are always transactional.
  </Card>

  <Card title="Scheduling" icon="clock">
    Delayed or scheduled delivery.
  </Card>
</CardGroup>
