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

# Recebimento de e-mails

> Receba e-mails no seu domínio verificado, configure MX, webhooks email.received e inbox no painel.

<Tip>
  Receber e-mail é o **caminho de volta**: alguém responde `suporte@seudominio.com` e a Notifique entrega o conteúdo no seu webhook e/ou na aba **Recebidos** do painel.
</Tip>

## O que mudou

Além de **enviar** com domínio verificado, você pode **receber** mensagens enviadas para endereços `@seudominio.com` (ou subdomínio cadastrado). O fluxo usa MX na sua zona DNS, processamento inbound na plataforma e o evento **`email.received`** nos webhooks.

## Pré-requisitos

1. **Domínio cadastrado e VERIFIED** para envio (provedor de e-mail da plataforma conforme configuração da plataforma).
2. **Registro MX** no domínio (ou subdomínio) apontando para o host inbound da Notifique — veja `inboundDnsRecords` na API ou no painel ao cadastrar o domínio.
3. **Canal E-mail** habilitado em **Settings → Mensagens recebidas** (Received messages).
4. **Webhook** cadastrado com o evento **`email.received`** (se quiser automação no seu backend).

<Note>
  Por padrão, ao habilitar o recebimento de e-mail, a plataforma **dispara webhook** e **não persiste** a mensagem no painel (evita cobrança de armazenamento). Ative **Persistir** nas configurações do canal se quiser ver os e-mails na aba **E-mails → Recebidos**.
</Note>

## Consultar via API

Quando **Persistir** está ativo, liste e-mails recebidos na API pública (escopo `email:inbound:read`):

```bash theme={null}
curl "https://api.notifique.dev/v1/email/inbound?page=1&limit=20" \
  -H "Authorization: Bearer sk_live_..."

curl "https://api.notifique.dev/v1/email/inbound/INBOUND_ID" \
  -H "Authorization: Bearer sk_live_..."
```

Filtros na listagem: `q`, `domainId`, `dateFrom`, `dateTo`. Referência: grupo **E-mails recebidos** na aba E-mails.

Com **`domainIds`** na chave, a listagem só inclui e-mails desses domínios. `domainId` inválido → **400**; domínio fora da chave → **403**. No detalhe, domínio não permitido → **404**.

## DNS para recebimento

Na resposta de **criar**, **listar**, **obter** ou **verificar** domínio, o objeto `data` inclui:

| Campo                 | Descrição                                                     |
| --------------------- | ------------------------------------------------------------- |
| `dnsRecords`          | Registros do provedor (DKIM, bounce, tracking, etc.)          |
| `suggestedDnsRecords` | SPF e DMARC recomendados para entregabilidade                 |
| `inboundDnsRecords`   | MX para **receber** e-mails (ex.: `10 inbound.notifique.dev`) |
| `dkim`                | Atalho `{ name, value }` do DKIM principal, quando disponível |
| `verification`        | Status por provedor e por registro DNS                        |

Exemplo de MX inbound:

```json theme={null}
{
  "type": "MX",
  "name": "seudominio.com",
  "value": "10 inbound.notifique.dev"
}
```

O host MX (`inbound.notifique.dev` ou o configurado na sua instância) deve resolver para um endereço **A** válido (não use CNAME no host usado como destino MX — provedores como Gmail rejeitam).

Após publicar o MX, chame **`POST /v1/email/domains/:id/verify`** até `verification.records` marcar o MX como `verified` (quando aplicável ao provedor inbound).

## Configurar no painel

1. **Settings → Canais → E-mail** (ou **Mensagens recebidas**): habilite o canal **E-mail**.
2. Escolha as ações padrão:
   * **Enviar webhook** — dispara `email.received` (padrão ao habilitar).
   * **Persistir** — grava no painel (aba **Recebidos**); pode consumir créditos/saldo de armazenamento inbound conforme o plano.
3. **Developer → Webhooks**: crie ou edite um webhook e marque **`email.received`** no grupo **E-mail**.
4. Opcional: filtre por **domínio de e-mail** no webhook para receber só eventos de domínios específicos.

## Evento `email.received`

Dispara quando um e-mail inbound é aceito e processado conforme as ações do workspace (webhook, persistência ou ambos).

```json theme={null}
{
  "event": "email.received",
  "workspaceId": "clxx123...",
  "instanceId": "",
  "timestamp": "2026-08-12T11:30:00.000Z",
  "data": {
    "inboundEmailId": "clinbound1...",
    "persisted": true,
    "from": "cliente@example.com",
    "to": "suporte@seudominio.com",
    "subject": "Dúvida sobre pedido #123",
    "matchedRuleIds": [],
    "persistDeniedReason": null
  }
}
```

| Campo em `data`       | Descrição                                                                    |
| --------------------- | ---------------------------------------------------------------------------- |
| `inboundEmailId`      | ID do e-mail recebido no painel; **`null`** se só webhook (sem persistência) |
| `persisted`           | `true` se a mensagem foi gravada no workspace                                |
| `from` / `to`         | Remetente e destinatário (endereço que recebeu no seu domínio)               |
| `subject`             | Assunto, ou `null`                                                           |
| `matchedRuleIds`      | Regras inbound que casaram (quando houver)                                   |
| `persistDeniedReason` | Motivo de falha ao persistir (ex.: saldo), quando aplicável                  |

Payload completo e demais eventos de envio: [Eventos dos webhooks](/emails-api/como-funciona/eventos-do-webhooks).

## Inbox no painel

Com **Persistir** ativo:

* **E-mails → Recebidos** lista mensagens inbound do workspace.
* O detalhe mostra preview HTML/texto, metadados, **Message-ID** MIME, threading (`In-Reply-To`, `References`) e timeline.
* O botão **Responder** abre o composer com destinatário, assunto `Re:` e headers de thread.

A leitura na API pública usa `GET /v1/email/inbound` e `GET /v1/email/inbound/:id` com escopo **`email:inbound:read`**. O painel usa a API de sessão (`/app/email/inbound`) com a mesma lógica.

## Responder mantendo a thread

No envio (`POST /v1/email/messages`), use o objeto **`headers`** com os cabeçalhos MIME permitidos:

* `In-Reply-To` — Message-ID da mensagem que você responde
* `References` — cadeia de Message-IDs (separados por espaço)
* `Message-ID` — opcional, ID customizado da sua resposta
* `X-Entity-Ref-ID` — referência interna opcional

```json theme={null}
{
  "from": "suporte@seudominio.com",
  "to": ["cliente@example.com"],
  "type": "email",
  "payload": {
    "subject": "Re: Dúvida sobre pedido #123",
    "html": "<p>Obrigado pelo contato. Seu pedido foi enviado.</p>"
  },
  "headers": {
    "In-Reply-To": "<abc@mail.example.com>",
    "References": "<abc@mail.example.com>"
  }
}
```

## Verificação de domínio (envio + inbound)

O endpoint **`POST /v1/email/domains/:id/verify`** retorna, além de `verified` e `code`:

* **`verificationSummary`** — texto legível com status por provedor (ex.: provedor de envio, provedor de entrega).
* **`data.verification`** — objeto estruturado com `providers`, `records` e status por registro DNS.

Códigos `EMAIL_DOMAIN_DNS_PENDING`, `EMAIL_DOMAIN_VERIFIED` e `EMAIL_DOMAIN_VERIFY_FAILED` continuam com HTTP **200** (não são erro HTTP). Detalhes: [Respostas de erro](/guides/conceitos/resposta-de-erros#verificar-domínio-de-e-mail-post-v1emaildomainsidverify).

## Checklist rápido

| Passo                       | Onde                                |
| --------------------------- | ----------------------------------- |
| Domínio VERIFIED para envio | Painel ou `POST .../verify`         |
| MX inbound no DNS           | `inboundDnsRecords` na API / painel |
| Canal e-mail inbound ligado | Settings → Mensagens recebidas      |
| Webhook `email.received`    | Developer → Webhooks                |
| Ver mensagens no painel     | Persistir = ligado                  |

## Próximos passos

* [Quick Start](/emails-api/como-funciona/quick-start) — cadastro de domínio e primeiro envio
* [Eventos dos webhooks](/emails-api/como-funciona/eventos-do-webhooks) — `email.received` e status de envio
* [Escopos da API Key](/emails-api/como-funciona/escopos-da-api-key) — inclui `email:inbound:read`
* [Webhooks (guia geral)](/guides/webhooks/index)
