mxout — Manual técnico
O mxout recebe um e-mail por HTTP (POST /send), assina com DKIM e
entrega direto no MX do destinatário via SMTP+STARTTLS. É um relay
HTTP→SMTP enxuto, multi-domínio e stateless.
Não é um servidor de recebimento (inbound). Não é multi-tenant. Não tem fila persistente — três tentativas em memória e segue.
Visão geral
| Versão | 0.2.0 |
| Linguagem | Rust (edition 2021) |
| Entrada | HTTP POST /send (JSON) |
| Saída | SMTP direto no MX do destino (porta 25, STARTTLS oportunístico) |
| Assinatura | DKIM RSA-SHA256, relaxed/relaxed, por domínio |
| Estado | Stateless (nada persiste em disco) |
| Imagem | Container scratch (~6 MB, binário estático, não-root) |
O problema e a solução
Aplicações precisam enviar e-mail transacional pelos próprios domínios, sem depender de um relay terceiro (SES, Mailgun) nem montar um Postfix completo.
O mxout resolve isso: uma API HTTP simples por trás de um token, que roteia
pelo domínio do remetente, assina com a chave DKIM daquele domínio e entrega
direto. Cada envio é rastreável ponta a ponta por um message_id.
Arquitetura
app cliente
│ POST /send (JSON, HTTP, X-Auth-Token)
▼
┌─────────┐ resolve MX ┌──────────────┐ SMTP+STARTTLS ┌────────────┐
│ mxout │ ───────────────▶│ DNS (MX/A) │ ───────────────▶│ MX destino │
└─────────┘ └──────────────┘ └────────────┘
│ assina DKIM pelo domínio do envelope-from
│ retry efêmero em memória: 5s / 10s / 30s
│ emite ledger JSON (1 linha por evento) no stdoutO ledger — uma linha JSON por evento do ciclo de vida no stdout — é o mecanismo de controle e auditoria. Como nada persiste, o log é a fonte de verdade do que foi enviado. Ver Ledger.
Por onde começar
| Você quer... | Vá para |
|---|---|
| Entender o que é e quando usar | O que é o mxout |
| Enviar o primeiro e-mail | Primeiro envio (5 min) |
| Adicionar um domínio | Adicionar um domínio |
| Integrar via API | POST /send |
| Monitorar/auditar envios | Ledger |
| Configurar DNS | Configurar DNS |
Requisitos
- Um servidor com IP de saída na porta 25 liberada e PTR/rDNS configurado.
- Controle do DNS dos domínios remetentes (para publicar DKIM, SPF, DMARC).
- Docker para rodar a imagem, ou o binário estático.