Configuração

O mxout lê a configuração de um arquivo JSON e de variáveis de ambiente. Segredos (token de auth) e chaves DKIM nunca ficam embutidos no binário — chegam via variável de ambiente e arquivos montados externamente.

Arquivo de configuração (mxout.json)

O caminho do arquivo é definido pela variável MXOUT_CONFIG. O valor padrão é mxout.json no diretório de trabalho. Em container, o caminho convencional é /etc/mxout/mxout.json.

Campos

Campo Tipo Padrão Descrição
listen string "0.0.0.0:8080" Endereço e porta em que a API HTTP escuta.
helo_hostname string — Hostname enviado no EHLO/HELO SMTP. Deve coincidir com o PTR/rDNS do IP de saída.
smtp_timeout_secs int 30 Timeout em segundos por etapa do diálogo SMTP.
domains objeto — Mapa de domínio para configuração DKIM. Veja estrutura abaixo.
kits_dir string derivado Diretório onde as chaves geradas por POST /domains são gravadas. Defina explicitamente: sem ele, o cadastro do primeiro domínio de uma instância nova falha.
smtp_listen string ausente Porta de submissão SMTP (ex.: "0.0.0.0:2525"). Ausente = listener desligado.
smtp_max_size int 5242880 Tamanho máximo aceito pelo listener SMTP.
smtp_tls_cert string ausente Certificado do STARTTLS. Ausente = auto-assinado gerado no boot.
smtp_tls_key string ausente Chave do certificado acima.
smtp_require_tls bool false Exige STARTTLS antes do AUTH. Ligue depois que todas as aplicações já falarem TLS.
retention_days int 7 Dias que uma entrega terminada fica consultável antes de sair do banco.
require_tls bool false Exige TLS na entrega. Destino sem STARTTLS vira erro temporário em vez de sair em claro. Pode ser sobreposto por domínio.
ledger_file string ausente Caminho do ledger em arquivo. Coloque no volume persistente, senão o histórico morre no redeploy.
ledger_max_bytes int 52428800 Tamanho antes de rotacionar. 0 = sem limite.
mx_override objeto {} Só para teste: domínio → ["host:porta"], entrega sem consultar DNS. Vazio em produção.

Estrutura de `domains`

Cada chave do objeto domains é o domínio do remetente (deve corresponder ao domínio do campo from no /send).

Campo Tipo Descrição
selector string Seletor DKIM publicado no DNS (ex.: "mail").
key_path string Caminho absoluto para a chave privada DKIM em formato PEM.
status string active ou pending. Domínio novo nasce pending e só envia após o GET /check passar.
limits objeto Cota própria (per_hour, per_day), sobrepondo o padrão global.
require_tls bool Política de TLS deste domínio remetente, sobrepondo a global.

Exemplo completo

{
  "listen": "0.0.0.0:8080",
  "helo_hostname": "mail.exemplo.com",
  "smtp_timeout_secs": 30,
  "domains": {
    "exemplo.com": {
      "selector": "mail",
      "key_path": "/etc/mxout/keys/exemplo.com.pem"
    },
    "outro-dominio.com": {
      "selector": "mxout",
      "key_path": "/etc/mxout/keys/outro-dominio.com.pem"
    }
  }
}

Segredos não ficam neste arquivo. O token de administração vem da variável MXOUT_AUTH_TOKEN; as credenciais de cliente são criadas pela API e guardadas como bcrypt no banco de estado — ver Clientes.

A configuração é reescrita pelo próprio serviço. Endpoints como POST /domains e PUT /ratelimit persistem no arquivo. Para editar à mão, pare o container antes — com ele no ar, a alteração é sobrescrita a partir da memória.

Variáveis de ambiente

Variável Descrição Padrão Exemplo
MXOUT_CONFIG Caminho para o arquivo mxout.json. mxout.json /etc/mxout/mxout.json
MXOUT_AUTH_TOKEN Token de administração. Ausente ou vazio = endpoints de gestão abertos (registra aviso no boot). Não envia e-mail. — (sem auth) s3cr3t-t0ken-aqui
MXOUT_DB Diretório do banco de estado (clientes e fila). <dir da config>/state /etc/mxout/state
MXOUT_REDIS Presente = modo assíncrono: aceita, persiste e entrega no tick. Ausente = síncrono. ausente (síncrono) 1
MXOUT_LEDGER_FILE Sobrepõe ledger_file da configuração. — /etc/mxout/ledger.jsonl
MXOUT_DNS IP do resolver DNS upstream para resolução de MX. Necessário em containers scratch sem /etc/resolv.conf. Resolver do sistema 1.1.1.1
RUST_LOG Nível de log do serviço. info debug

Sobre `MXOUT_AUTH_TOKEN`

Se a variável estiver ausente ou vazia, o endpoint /send fica acessível sem autenticação. O mxout registra um aviso visível nos logs na inicialização. Use somente em rede privada com controle de acesso na camada de rede.

Sobre `MXOUT_DNS`

Imagens baseadas em scratch não possuem /etc/resolv.conf. Sem MXOUT_DNS, o mxout não consegue resolver registros MX. Defina esta variável sempre que rodar o container a partir de uma imagem mínima.

Chaves DKIM

As chaves privadas DKIM são arquivos PEM referenciados por key_path no mxout.json. Elas devem ser montadas no container como volumes somente-leitura. Nunca inclua chaves privadas em imagens Docker ou repositórios.

Para gerar um par de chaves, consulte mxout-keygen.

Para publicar o registro DNS correspondente, consulte Configurar DNS.

By Borlot.com.br on 01/06/2026