# Migrar de qualquer provedor por SMTP

> Guia para trocar qualquer provedor SMTP (Gmail, Microsoft 365, servidor próprio, hospedagem, outro serviço de envio) pelo Couryo sem mudar o código. Credenciais, cabeçalhos, idempotência, códigos de resposta e a troca de DNS na ordem segura.

Fonte: https://couryo.com/docs/migrate-smtp

Se o seu sistema envia por SMTP, a migração para o Couryo é trocar quatro valores: servidor, porta, usuário e senha. Cada mensagem passa pelo mesmo caminho da API: domínio verificado, supressão, limites, linha do tempo e webhooks. Siga a [ordem segura da migração](https://couryo.com/docs/migration.md) e use este guia para os detalhes.

## As credenciais

| Campo | Valor |
|---|---|
| Servidor | `smtp.couryo.com` |
| Porta | `587` (STARTTLS), `465` (TLS direto) ou `2525` (STARTTLS, quando a 587 está bloqueada) |
| Usuário | `couryo` |
| Senha | a chave de API (`ck_live_...`, ou `ck_test_...` para testar sem entregar) |
| Criptografia | obrigatória (TLS 1.2 ou mais novo) |

O remetente (`From`) precisa estar num [domínio verificado](https://couryo.com/docs/domains.md) no Couryo. Comece com a chave `ck_test_` em homologação: o e-mail é capturado, aparece em **E-mails** com o conteúdo e o [link de revisão](https://couryo.com/docs/test-mode.md#link-de-revisao), e ninguém recebe.

## O que muda em relação a outros SMTPs

- **Um id por mensagem:** a resposta ao `DATA` é `250 2.0.0 Ok: queued as msg_...`. Guarde o id para consultar a linha do tempo em `GET /v1/emails/{id}`.
- **Sem e-mail duplicado em nova tentativa:** o `Message-ID` da mensagem (ou o cabeçalho `Idempotency-Key`) vale como chave de idempotência por 24 horas.
- **Limites explicados:** perto de um limite, a resposta é `452 4.7.0` com o motivo e os números, em vez de uma recusa sem explicação. Os códigos estão em [SMTP](https://couryo.com/docs/smtp.md#codigos-de-resposta).
- **Opções por cabeçalho:** `X-Couryo-Stream: marketing` liga o descadastro em um clique e separa a supressão do transacional; `X-Couryo-Tags: tipo=pedido` vira tags para filtrar no painel e nos webhooks.
- **Até 50 destinatários por mensagem.** Para mandar a mesma mensagem a muita gente, prefira uma por destinatário (ou uma [campanha](https://couryo.com/docs/campaigns.md)): a entrega e as métricas ficam por pessoa.
- **O que o SMTP não faz:** templates salvos e o lote de 100 numa chamada são da [API REST](https://couryo.com/docs/sending.md).

## Exemplos de troca

```ini title="Laravel (.env)"
MAIL_MAILER=smtp
MAIL_HOST=smtp.couryo.com
MAIL_PORT=587
MAIL_USERNAME=couryo
MAIL_PASSWORD=ck_live_...
MAIL_ENCRYPTION=tls
```

```php title="PHPMailer"
$mail->isSMTP();
$mail->Host = 'smtp.couryo.com';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = 'couryo';
$mail->Password = getenv('COURYO_API_KEY');
```

```python title="Django (settings.py)"
EMAIL_HOST = "smtp.couryo.com"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = "couryo"
EMAIL_HOST_PASSWORD = os.environ["COURYO_API_KEY"]
```

Ferramentas com campo de "SMTP personalizado" (Supabase Auth, WordPress, n8n, ERPs) usam os mesmos quatro valores.

## DNS

1. **Não mexa no MX** das suas caixas de e-mail nem no SPF do domínio principal. O Couryo passa no SPF pelo subdomínio `bounces`, por CNAME, sem gastar nenhuma das 10 consultas de DNS do seu SPF.
2. **Publique os registros do Couryo:** `couryo1._domainkey`, `couryo2._domainkey` e `bounces` (CNAME) e, se você ainda não tiver, o DMARC sugerido. Eles não conflitam com os do provedor atual.
3. **Se o provedor antigo já usa o subdomínio `bounces`**, a página do domínio mostra o registro como diferente, e o domínio só fica verificado quando ele apontar para o Couryo. Nesse caso, a troca desse registro é o momento da virada: faça na hora de menor volume, com o código já pronto para o Couryo.
4. Espere o domínio ficar verificado, mova o envio aos poucos e, 7 dias depois do fim, apague a chave DKIM e o `include:` do SPF do provedor antigo, se nada mais usar.
