Infraestrutura de envio para produtos que não podem falhar: confirmação de conta, recuperação de senha, alertas. Configuração mínima e cada mensagem rastreada.
curl https://api.codemail.com.br/v1/emails \
-H "Authorization: Bearer $CODEMAIL_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"from": "alertas@seudominio.com.br",
"to": ["cliente@exemplo.com"],
"subject": "Seu pedido foi enviado",
"html": "<p>Olá!</p>"}'
O que não deveria sair é barrado na entrada, sem gastar a sua cota e sem prejudicar a reputação do seu domínio.
550 5.7.1 Remetente nao autorizado para esta credencial
550 5.1.1 Destinatario na lista de supressao
450 4.7.1 Cota de envio atingida; tente novamente depois
Publique os registros gerados no seu DNS. O painel confere SPF, DKIM e o MX de retorno automaticamente.
Uma credencial por aplicação, com limites próprios por hora e por dia.
Aponte para smtp.codemail.com.br (portas 587 ou 2525) ou chame a API, e siga cada mensagem no painel.
Bibliotecas oficiais sem dependências, com idempotência automática, retentativas em erro de rede, 429 e 5xx, e erros tipados. A chave fica no servidor.
from codemail import Codemail
cm = Codemail("cm_live_...") # ou CODEMAIL_API_KEY
r = cm.emails.send(
from_="alertas@seudominio.com.br",
to="cliente@exemplo.com",
subject="Seu pedido foi enviado",
html="<p>Olá!</p>",
)
print(r.id, r.status) # queued
import { Codemail } from "codemail-sdk";
const cm = new Codemail("cm_live_..."); // ou CODEMAIL_API_KEY
const r = await cm.emails.send({
from: "alertas@seudominio.com.br",
to: "cliente@exemplo.com",
subject: "Seu pedido foi enviado",
html: "<p>Olá!</p>",
});
console.log(r.id, r.status); // queued
require "codemail"
cm = Codemail::Client.new("cm_live_...") # ou CODEMAIL_API_KEY
r = cm.emails.create(
from: "alertas@seudominio.com.br",
to: "cliente@exemplo.com",
subject: "Seu pedido foi enviado",
html: "<p>Olá!</p>"
)
puts r.id, r.status # queued
use Codemail\Codemail;
$cm = new Codemail('cm_live_...'); // ou CODEMAIL_API_KEY
$r = $cm->emails->send(
from: 'alertas@seudominio.com.br',
to: 'cliente@exemplo.com',
subject: 'Seu pedido foi enviado',
html: '<p>Olá!</p>',
);
echo $r['id'], ' ', $r['status']; // queued
cm, err := codemail.New("cm_live_...") // ou CODEMAIL_API_KEY
if err != nil { log.Fatal(err) }
r, err := cm.Emails.Send(ctx, codemail.SendParams{
From: "alertas@seudominio.com.br",
To: []string{"cliente@exemplo.com"},
Subject: "Seu pedido foi enviado",
HTML: "<p>Olá!</p>",
})
fmt.Println(r.ID, r.Status) // queued
using Codemail;
var cm = new CodemailClient("cm_live_..."); // ou CODEMAIL_API_KEY
var r = await cm.Emails.SendAsync(new SendEmailRequest
{
From = "alertas@seudominio.com.br",
To = new[] { "cliente@exemplo.com" },
Subject = "Seu pedido foi enviado",
Html = "<p>Olá!</p>",
});
Console.WriteLine($"{r.Id} {r.Status}"); // queued
Codemail cm = Codemail.create("cm_live_..."); // ou CODEMAIL_API_KEY
var r = cm.emails().send(SendRequest
.from("alertas@seudominio.com.br")
.to("cliente@exemplo.com")
.subject("Seu pedido foi enviado")
.html("<p>Olá!</p>"));
System.out.println(r.id() + " " + r.status()); // queued
Os SDKs falam com a mesma API REST do exemplo acima: get, events e list também estão em todos. Sem SDK para a sua linguagem, a API REST e o SMTP continuam valendo.
Conecte Claude, ChatGPT ou qualquer cliente MCP ao Transacional. O assistente envia e consulta o estado de um pedido. O que ele pode fazer fica definido na chave, no painel, e não no texto do pedido.
send_email e get_email_status. Sem anexos, Cc, Bcc, nem leitura de caixa{
"mcpServers": {
"codemail": {
"url": "https://mcp.codemail.com.br/mcp",
"headers": {
"Authorization": "Bearer cm_live_..."
}
}
}
}
Todos os planos incluem domínios verificados, logs e supressão automática.
Nos planos pagos você pode ligar o excedente: cada e-mail além do plano custa R$ 0,0036, até o teto que você mesmo definir. Sem o excedente, o envio para no limite do plano.
Não. É SMTP padrão nas portas 587 ou 2525: troque host, usuário e senha e o envio continua igual. Se preferir, a API REST está documentada.
Falhas permanentes e reclamações entram na lista de supressão automaticamente, protegendo a reputação do seu domínio. Você pode remover um endereço pelo painel.
7 dias no Free, 30 no Starter, 90 no Pro e 365 no Enterprise.
Sim. Cada credencial tem limite por hora e por dia, e picos fora do normal são barrados.
O painel confere o DNS de hora em hora e avisa antes de suspender os envios do domínio. Voltou o registro, o domínio volta sozinho.
Newsletters e campanhas para quem pediu para receber.
Conhecer o Lists →Caixas @suaempresa para o time, com webmail e IA.
Conhecer o Inbox →