A versão 0.1.0-alpha.1 oferece 16 recursos principais, 30 módulos de recursos e 151 operações. Conveniências de argumentos opcionais e funções que retornam módulos subordinados não representam operações adicionais. O pacote usa o identificador :mailcore. Requer Elixir 1.16+ e Erlang/OTP 26+; a matriz usa 1.16/26, 1.17/27, 1.18/27, 1.19/28 e 1.20/29.
As funções usam nomes em snake_case e recebem o cliente como primeiro argumento. O corpo mantém os campos em português do contrato HTTP. Identificadores são codificados como um único segmento de URI, preservando o prefixo da API.
Operações
Todos os módulos abaixo pertencem a Mailcore.Recursos. Operações HTTP retornam {:ok, %Mailcore.Resposta{}} ou {:error, %Mailcore.Erro{}}; opções são uma keyword list no último argumento.
| Módulo | Funções | Operações |
|---|---|---|
Emails | enviar, listar, obter, reagendar, cancelar, obter_por_idempotencia, eventos, baixar_anexo | 8 |
Lotes | enviar, obter_por_idempotencia | 2 |
Dominios | criar, listar, obter, atualizar, remover, registros_dns, verificar | 7 |
ChavesApi | criar, listar, renomear, revogar | 4 |
SegmentosContato | listar, adicionar, remover | 3 |
TopicosContato | listar, atualizar | 2 |
ImportacoesContatos | prever, criar, obter | 3 |
ExportacoesContatos | criar, listar, obter, baixar, baixar_fluxo | 5 |
Contatos | criar, listar, obter, atualizar, remover, adicionar_em_lote, alterar_em_lote | 7 |
Segmentos | criar, listar, obter, atualizar, remover | 5 |
Topicos | criar, listar, obter, atualizar, remover | 5 |
PropriedadesContatos | criar, listar, obter, atualizar, remover | 5 |
VersoesModelo | listar, obter, restaurar, prever | 4 |
PastasModelo | listar, criar, atualizar, remover | 4 |
Modelos | criar, listar, obter, atualizar, remover, prever, obter_previa, testar, publicar, duplicar | 10 |
EventosWebhook | listar, obter, listar_tentativas, reenviar | 4 |
Webhooks | criar, listar, obter, atualizar, remover | 5 |
Campanhas | criar, listar, obter, atualizar, remover, duplicar, revisar, enviar, cancelar, prever, testar, ler_previa, obter_metricas, listar_destinatarios, listar_links_clicados | 15 |
ExecucoesAutomacoes | listar, obter | 2 |
Automacoes | criar, listar, obter, atualizar, remover, duplicar, parar | 7 |
Eventos | criar, listar, obter, atualizar, remover, enviar | 6 |
Recebimento | listar, obter, listar_anexos, obter_anexo, baixar_original, baixar_anexo, baixar_original_fluxo, baixar_anexo_fluxo | 8 |
EmailsCaixa | listar, obter, responder, encaminhar | 4 |
EtiquetasConversaCaixa | adicionar, substituir, remover | 3 |
ConversasCaixa | listar, buscar, obter, atualizar, remover | 5 |
EtiquetasCaixa | listar, obter, criar, atualizar, remover | 5 |
RascunhosCaixa | listar, obter, criar, atualizar, remover, enviar | 6 |
Caixas | criar, listar, obter, atualizar, remover | 5 |
ConcessoesCli | listar, revogar | 2 |
CliMailcore | Agrega ConcessoesCli. | 0 |
| Total | 151 operações | 151 |
Os módulos subordinados usam a mesma configuração do cliente. Helpers como Contatos.exportacoes/0 apenas retornam o módulo; não fazem requisições nem criam processos. CliMailcore é um agregador e suas duas operações estão em ConcessoesCli.
Pedidos e respostas
- Pedidos JSON aceitam mapas com as propriedades do contrato HTTP. Envio de lotes exige lista na raiz.
nilexplícito na raiz não substitui mapa; funções com corpo opcional usam%{}como padrão. - Campos
nilefalsesão preservados dentro dos pedidos. Filtrosnilsão omitidos da query;falseé enviado comofalse. O SDK não cria átomos a partir das chaves de uma resposta. - Respostas conservam bytes originais, status, cabeçalhos e quantidade lida.
Mailcore.Resposta.json/1interpreta o binário sob decisão do chamador. Respostas sem conteúdo conservamdados: "". - Inteiros decodificados são bignums, até 1.024 dígitos pelo limite do Jason; decimais são
%Decimal{}. Os bytes originais permanecem disponíveis e a configuração global do parser da aplicação é preservada. - A paginação é explícita: cada operação consulta uma página e mantém o envelope e os cursores do recurso. Não há varredura automática de todas as páginas.
Contratos de negócio
O servidor valida permissões, escopos, formatos, revisões e estados. Envio direto aceita composição e anexos Base64/CID. Envio individual por modelo aceita anexos Base64 sem CID e não combina com HTML/texto, Cc/Cco, cabeçalhos ou nome de exibição no remetente. Lotes contêm de 1 a 100 mensagens e não aceitam Cc/Cco, cabeçalhos, nome de exibição no remetente ou anexos. A aceitação de uma intenção não comprova entrega SMTP.
Atualizações e ações em modelos, campanhas, automações, caixas e rascunhos mantêm os campos de revisão exigidos pela API. Um conflito HTTP 409 é devolvido à aplicação; a biblioteca não inventa revisões nem refaz a edição.
Importações recebem CSV UTF-8 no pedido JSON. O limite de negócio é 8 MiB; limites de serialização não ampliam os limites específicos de cada endpoint. A chave secreta de API é devolvida somente na criação. Concessões CLI permitem consulta e revogação, sem iniciar autenticação interativa ou renovar credenciais. O SDK não utiliza rotas privadas de sessão ou dashboard.
Conteúdo recebido e fluxo
Recebimento consulta mensagens, anexos e original MIME por rotas autenticadas. baixar_original_fluxo, baixar_anexo_fluxo e ExportacoesContatos.baixar_fluxo entregam blocos ao consumidor. O consumidor recebe binário e retorna :ok ou {:error, %Mailcore.Erro{}}; a próxima leitura depende do retorno. Sucesso mantém dados: "" e informa total_bytes.
Downloads comuns acumulam a resposta em memória. Ajuste o limite de resposta e o prazo por operação conforme o orçamento da aplicação. Detalhes HTML com data_uri podem crescer pela expansão dos anexos; consulte com formato_html: "cid" quando apropriado.
URLs temporárias em metadados são capacidades sensíveis. O SDK não as segue automaticamente nem envia Bearer para destinos extraídos das respostas. A retenção e disponibilidade dos conteúdos pertencem ao contrato do servidor.
Transporte e ciclo de vida
A execução padrão usa Req.Request de baixo nível com Req.Finch, TLS verificado e pool HTTP/1.1 compartilhado. As opções são independentes de Req.default_options da aplicação, sem passos automáticos de retentativa, redirecionamento, descompressão ou decodificação, e sem manutenção de cookies. Clientes Req injetados mantêm as políticas da aplicação.
O prazo total inclui preparação, credenciais, rede, leitura e consumidor. O controle de prazo encerra a tarefa de transporte ao expirar; um monitor supervisionado encerra essa tarefa quando o processo chamador termina. Callbacks executam nessa tarefa e precisam tratar seus efeitos externos e arquivos parciais.
Cabeçalhos e comprimento declarado são validados quando Req os disponibiliza ao SDK. Uma interrupção de I/O anterior pode resultar em falha de rede sem status. Os limites configurados continuam aplicados durante a leitura dos bytes disponíveis.
Verificação
Os 151 contratos têm casos independentes da especificação do gerador. Cada caso chama uma função pública sobre HTTP local real e verifica método, caminho codificado, query, corpo, opções, resposta e variantes de download. Os dados são sintéticos. Esses testes não constituem implantação, entrega SMTP ou medição de desempenho em produção.
As fontes dos recursos são estáticas. python3 scripts/gerar_recursos.py --verificar confere a correspondência com a especificação local, sem depender de outro projeto. O gerador não participa da execução do SDK.