# Supabase Auth com SMTP personalizado

> Faça o e-mail de confirmação, o link mágico e a recuperação de senha do Supabase Auth chegarem, com o SMTP do Couryo. Passo a passo no painel, na CLI e pela API de gerenciamento.

Fonte: https://couryo.com/docs/supabase

O serviço de e-mail que vem embutido no Supabase serve para testar: ele tem um limite de envio por hora bem baixo, e em projetos novos só entrega para os endereços da equipe do projeto. Em produção, é a causa clássica de "o e-mail de confirmação não chega". A solução é ligar um SMTP personalizado.

## Antes de começar

1. No Couryo, [verifique o domínio](https://couryo.com/docs/domains.md) de onde os e-mails vão sair (por exemplo, `exemplo.com.br`).
2. Crie uma chave de API com escopo `send`. Ela é a senha do SMTP.

## 1. Configure no painel do Supabase

Em **Authentication > Emails > SMTP Settings**, ligue **Enable Custom SMTP** e preencha:

| Campo | Valor |
|---|---|
| Sender email | um endereço do domínio verificado, como `nao-responda@exemplo.com.br` |
| Sender name | o nome do seu app |
| Host | `smtp.couryo.com` |
| Port number | `587` (ou `465`) |
| Username | `couryo` |
| Password | a chave de API (`ck_live_...`) |

Salve. Depois, em **Authentication > Rate Limits**, ajuste o limite de e-mails por hora para o volume do seu app: com SMTP próprio, quem decide esse número é você.

> Quer testar o fluxo sem entregar nada? Use uma chave `ck_test_`. O e-mail de confirmação é capturado e aparece no painel do Couryo, com o link clicável.

## 2. Ou pela CLI (desenvolvimento local e projetos versionados)

```toml title="supabase/config.toml"
[auth.email.smtp]
enabled = true
host = "smtp.couryo.com"
port = 587
user = "couryo"
pass = "env(COURYO_API_KEY)"
admin_email = "nao-responda@exemplo.com.br"
sender_name = "Exemplo"
```

## 3. Ou pela API de gerenciamento

```bash title="Terminal"
curl -X PATCH "https://api.supabase.com/v1/projects/$PROJECT_REF/config/auth" \
  -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "external_email_enabled": true,
    "smtp_admin_email": "nao-responda@exemplo.com.br",
    "smtp_sender_name": "Exemplo",
    "smtp_host": "smtp.couryo.com",
    "smtp_port": "587",
    "smtp_user": "couryo",
    "smtp_pass": "'"$COURYO_API_KEY"'"
  }'
```

## 4. Teste

Cadastre um usuário de teste no seu app (ou em **Authentication > Users > Add user > Send invitation**). No painel do Couryo, em **E-mails**, a mensagem aparece com a linha do tempo: aceito, enviado e entregue, com a resposta do servidor de destino. Se foi recusada, a explicação diz por quê, em português.

## Os modelos de e-mail do Supabase

Os textos ficam em **Authentication > Emails > Templates** e usam variáveis como `{{ .ConfirmationURL }}`. Algumas regras que ajudam a chegar na caixa de entrada:

- **Confira o Site URL e as Redirect URLs** (**Authentication > URL Configuration**). Link apontando para `localhost` ou para outro domínio é o segundo motivo mais comum de "o link não funciona".
- **Escreva como uma pessoa:** "Confirme o seu e-mail para entrar no Exemplo" no assunto, o nome do app no corpo e uma linha dizendo por que a pessoa recebeu.
- **Não use encurtador de link** e evite um e-mail só com imagem.
- **Prefira o código de 6 dígitos (`{{ .Token }}`) quando o app abre no celular:** alguns provedores corporativos abrem o link antes da pessoa para checar segurança, o que pode gastar um link de uso único.

## Ainda não chegou?

| O que ver | Onde |
|---|---|
| O Supabase chegou a enviar? | **Logs > Auth** no Supabase. Erro de SMTP aparece ali, com o código |
| O Couryo recebeu? | **E-mails** no painel do Couryo, buscando pelo destinatário |
| `550 5.7.1` no log do Supabase | o Sender email não está num domínio verificado, ou a conta ainda está no nível 0 (sandbox) |
| `535 5.7.8` | usuário diferente de `couryo` ou chave inválida, revogada ou sem escopo `send` |
| Entregue, mas a pessoa não achou | caixa de spam ou abas do Gmail. Veja [Por que meu e-mail cai no spam](https://couryo.com/guias/email-caindo-no-spam.md) |
| `over_email_send_rate_limit` | o limite de **Rate Limits** do Supabase, não o do Couryo |

Mais causas, provedor por provedor, no guia [E-mail de confirmação não chega](https://couryo.com/guias/email-de-confirmacao-nao-chega.md).
