Tudo o que está entre a sua aplicação e a caixa de entrada.
Envio, configuração de domínios, eventos, webhooks e as proteções à volta deles, operados por nós.
O que acontece a um email.
POST /v1/emails com uma chave do lado do servidor.202.Envios que resistem a novas tentativas.
Só recebe um id de email depois de o email estar guardado. Se não puder ser guardado, recebe um 503 que pode repetir, nunca um id inventado.
- Emails individuais, ou lotes de até 100 por pedido
- Agendamento de 1 minuto a 30 dias de antecedência, com cancelamento e reagendamento
- Até 50 destinatários por email
- Anexos até 15 MB cada e 40 MB por mensagem nos planos pagos
Idempotency-Keyguardada durante pelo menos 24 horas
curl -X POST https://api.outstamp.dev/v1/emails \
-H "Authorization: Bearer $OUTSTAMP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: welcome-42" \
-d '{
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Bem-vindo à Acme",
"html": "<p>A sua conta está pronta.</p>"
}'const response = await fetch("https://api.outstamp.dev/v1/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OUTSTAMP_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": `welcome-${user.id}`
},
body: JSON.stringify({
from: "Acme <[email protected]>",
to: "[email protected]",
subject: "Bem-vindo à Acme",
html: "<p>A sua conta está pronta.</p>"
})
});
const email = await response.json(); // 202, { id, status: queued }import os, requests
response = requests.post(
"https://api.outstamp.dev/v1/emails",
headers={
"Authorization": f"Bearer {os.environ['OUTSTAMP_API_KEY']}",
"Idempotency-Key": f"welcome-{user.id}",
},
json={
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Bem-vindo à Acme",
"html": "<p>A sua conta está pronta.</p>",
},
)
email = response.json() # 202, { id, status: queued }Domínios, configurados consigo.
Mostramos os registos exatos, verificamo-los por si e dizemos o que falta.
- São obrigatórios três registos DKIM; MAIL FROM e DMARC são recomendados
- Um domínio só com DKIM já pode enviar, marcado como parcialmente verificado
- Verificações automáticas durante 72 horas e, depois, reverificações regulares
- Notas para Cloudflare, Route 53, Namecheap e GoDaddy
| CNAME | DKIM | Verificado |
| CNAME | DKIM | Verificado |
| CNAME | DKIM | Verificado |
| MX | MAIL FROM | Verificado |
| TXT | SPF | Verificado |
| TXT | DMARC | Recomendado |
Eventos sobre os quais pode construir.
Submissão, entrega e queixas são factos separados, por isso um evento atrasado nunca se sobrepõe a um mais recente.
- Assinatura HMAC-SHA256 sobre o id da entrega, o timestamp e o corpo em bruto
- 10 tentativas de entrega ao longo de 48 horas, e reenvio durante 30 dias
- Pelo menos uma vez e sem ordem garantida, por design: elimine duplicados pelo id do evento
- Quando faz a rotação do segredo, as entregas levam as duas assinaturas durante 24 horas
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(request, rawBody, secret) {
const id = request.headers["outstamp-id"];
const timestamp = request.headers["outstamp-timestamp"];
const header = request.headers["outstamp-signature"] ?? "";
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${id}.${timestamp}.${rawBody}`)
.digest("hex");
return header.split(",")
.map((part) => part.trim().replace(/^v1=/, ""))
.some((candidate) => candidate.length === expected.length &&
timingSafeEqual(Buffer.from(candidate, "hex"), Buffer.from(expected, "hex")));
}Tipos de evento que pode subscrever
- email.accepted
- email.scheduled
- email.queued
- email.sent
- email.delivered
- email.delivery_delayed
- email.bounced
- email.complained
- email.rejected
- email.failed
- email.suppressed
- email.opened
- email.clicked
- email.canceled
- email.submission_unknown
- domain.created
- domain.status_changed
- domain.deleted
- suppression.created
- suppression.deleted
- project.quota_warning
- project.reputation_warning
- project.sending_paused
- project.sending_resumed
Teste e produção, sempre separados.
Chaves diferentes, prefixos diferentes e emails de teste que nunca chegam à internet.
- Chaves
os_test_eos_live_que se distinguem à primeira vista - Endereços do simulador para entrega, bounce, atraso, queixa, supressão, rejeição, falha e resposta perdida
- Os envios de teste produzem os mesmos eventos e webhooks que os de produção, e nunca são cobrados
- Antes de o seu domínio estar pronto, emails reais para membros verificados do seu espaço de trabalho, 10 por dia
| Enviar para | Recebe |
|---|---|
| delivered@simulator.outstamp.dev | email.delivered |
| bounce@simulator.outstamp.dev | email.bounced |
| transient@simulator.outstamp.dev | email.delivery_delayed |
| complaint@simulator.outstamp.dev | email.complained |
| suppressed@simulator.outstamp.dev | email.suppressed |
Proteções, ativas por omissão.
As verificações que um operador de email cuidadoso faria, aplicadas a todos os projetos.
- Os hard bounces e as queixas são suprimidos automaticamente
- Taxa de bounce: aviso aos 3%, ação aos 5%. Taxa de queixas: aviso aos 0,05%, ação aos 0,1%
- Os limites de envio crescem com o seu histórico de entregas
- Os endereços suprimidos são verificados antes de cada envio
- A enviar
App Acme
Taxa de bounce de 0,4% em 24 horas
- A enviar
Acme staging
Taxa de bounce de 0,1% em 24 horas
- Em pausa
Projeto paralelo
Taxa de bounce de 5,2% em 24 horas
Um painel para toda a equipa.
O que programadores, suporte e finanças precisam, sem partilharem as mesmas credenciais.
Registo de emails
Encontre qualquer email e veja a cronologia completa, os destinatários e o conteúdo enquanto a retenção o permitir.
Domínios e chaves
Estado do DNS por registo, e chaves limitadas por permissão e por domínio.
Webhooks
Cada tentativa de entrega com a respetiva resposta, um botão de teste e reenvio.
Supressões
Porque é que um endereço está bloqueado, e uma forma de o remover, com confirmação.
Utilização
Emails e destinatários por dia, face ao seu plano e aos seus limites.
Equipa e segurança
Funções de proprietário, administrador, programador, analista e faturação, com passkeys e aplicações de autenticação.
Os seus dados, guardados por pouco tempo.
Uma retenção mais curta é uma definição, não um extra pago.
| Dados | Guardados durante | Pode ser definido para |
|---|---|---|
| Metadados de entrega e eventos | 30 dias | Fixo |
| Endereços dos destinatários e assunto | 30 dias | 0, 1, 7 ou 30 dias |
| Corpos HTML e de texto | 7 dias | 0, 1, 7 ou 30 dias |
| Anexos | Até à entrega, mais até 24 h | Apagados logo após a submissão |
| Corpos dos pedidos à API | 7 dias | Desativado |
| Eventos e tentativas de webhook | 30 dias | Fixo |
- Sem treino de modelos com os seus emails, e sem publicidade
- O acesso do suporte ao conteúdo é auditado, e pode desativá-lo
- Desligar o armazenamento do conteúdo não custa nada
Ainda não disponível.
Para que possa decidir antes de se registar, não depois.
Modelos
Envie o HTML e o texto que gera. Os modelos guardados ainda não estão disponíveis.
Relay SMTP
O Outstamp é uma API HTTP. Ainda não existe endpoint SMTP.
SDKs oficiais
REST simples com um esquema OpenAPI: qualquer cliente HTTP serve.
Envie o seu primeiro email em modo de teste.
Sem cartão e sem DNS. Adicione o seu domínio quando estiver pronto.
- Sem cartão para testar
- Preços em euros, sem IVA