O que é SafeNode
Hosting Integration?
SafeNode não é só um produto. É uma camada que fica entre o código e a infraestrutura. Resolvemos a dor de configurar SMTP, DNS, templates e rastreamento de e-mails.
Setup em 10 minutos
Script automatizado. Docker pronto. Zero configuração manual.
API REST simples
Envie e-mails com uma requisição HTTP. Sem SMTP. Sem complexidade.
Funciona em qualquer VPS
DigitalOcean, AWS, Hostinger, cPanel, Plesk... Qualquer lugar.
Por que usar SafeNode?
-
Zero configuração de SMTP/DNS: Não precisa configurar SPF, DKIM, DMARC manualmente
-
Templates versionados: Crie templates no Relay visual e use na API
-
Analytics em tempo real: Veja entregas, aberturas, cliques no dashboard
-
Webhooks: Receba eventos de entrega, abertura, clique em tempo real
-
Escalável: De 1 e-mail a milhões sem se preocupar com infraestrutura
Enquanto outros produtos focam em "e-mail transacional", SafeNode é uma camada completa: Mail + Relay (editor visual) + IDE SafeCode + Integração pronta com hospedagem.
Integre com suas hospedagens favoritas
Conecte-se perfeitamente com plataformas populares e serviços para melhorar seu fluxo de trabalho.
Comece em minutos
Tenha e-mails funcionando em qualquer VPS em poucos minutos.
Obtenha seu token da API
- Acesse https://safenode.cloud/mail
- Faça login (ou crie uma conta grátis)
- Crie um novo projeto de e-mail
- Copie o token gerado
Instale via script (Linux/Mac/Windows)
curl -o setup-safenode.sh https://safenode.cloud/integration/setup-safenode.sh
sudo bash setup-safenode.sh
Configure variáveis de ambiente
cd /opt/safenode-mail
cp .env.example .env
nano .env # Cole seu token da API
Envie seu primeiro e-mail
Node.js
const axios = require('axios');
const response = await axios.post(
'https://safenode.cloud/api/mail/send',
{
to: 'usuario@exemplo.com',
subject: 'Olá do SafeNode!',
html: 'Seu primeiro e-mail!
Funciona! 🎉
'
},
{
headers: {
'Authorization': 'Bearer SEU_TOKEN_AQUI',
'Content-Type': 'application/json'
}
}
);
console.log(response.data);
PHP
$token = 'SEU_TOKEN_AQUI';
$data = [
'to' => 'usuario@exemplo.com',
'subject' => 'Olá do SafeNode!',
'html' => 'Seu primeiro e-mail!
Funciona! 🎉
'
];
$ch = curl_init('https://safenode.cloud/api/mail/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
echo json_encode($result, JSON_PRETTY_PRINT);
Pronto! 🎉
Seu primeiro e-mail foi enviado. Veja os logs e analytics no dashboard.
API Reference
Documentação completa da API SafeNode Mail.
Base URL
https://safenode.cloud/api/mail
Autenticação
Todas as requisições devem incluir o token no header Authorization:
Authorization: Bearer seu_token_aqui
POST /send
Envia um e-mail.
Request Body
{
"to": "destinatario@email.com", // Obrigatório
"subject": "Assunto do e-mail", // Obrigatório
"html": "Conteúdo HTML
", // Obrigatório (ou use template)
"text": "Versão texto (opcional)", // Opcional
"template": "nome-do-template", // Opcional
"variables": { // Opcional (para templates)
"nome": "João",
"codigo": "123456"
}
}
Response (Sucesso)
{
"success": true,
"message_id": "msg_abc123",
"status": "sent"
}
Response (Erro)
{
"success": false,
"error": "Mensagem de erro",
"error_code": "ERROR_CODE"
}
Usando Templates
Templates são criados no Relay visual e podem ser reutilizados:
{
"to": "usuario@exemplo.com",
"template": "confirmar-cadastro",
"variables": {
"nome": "João",
"codigo": "123456",
"link": "https://exemplo.com/confirmar?token=abc"
}
}
Códigos de Erro Comuns
| Código | Descrição |
|---|---|
MISSING_TOKEN |
Token não fornecido |
INVALID_TOKEN |
Token inválido ou expirado |
MISSING_FIELDS |
Campos obrigatórios ausentes |
INVALID_EMAIL |
E-mail inválido |
LIMIT_EXCEEDED |
Limite de envios excedido |
TEMPLATE_NOT_FOUND |
Template não encontrado |
Exemplos de Uso
Casos de uso comuns e exemplos práticos.
Confirmação de Cadastro
// Node.js
const axios = require('axios');
async function sendConfirmationEmail(userEmail, userName, confirmToken) {
const response = await axios.post(
'https://safenode.cloud/api/mail/send',
{
to: userEmail,
subject: 'Confirme seu cadastro',
html: `
Olá, ${userName}!
Clique no link abaixo para confirmar seu cadastro:
Este link expira em 24 horas.
`,
text: `Olá, ${userName}!\n\nClique no link para confirmar: https://meusite.com/confirmar?token=${confirmToken}`
},
{
headers: {
'Authorization': 'Bearer ' + process.env.SAFENODE_TOKEN,
'Content-Type': 'application/json'
}
}
);
return response.data;
}
Reset de Senha
// PHP
function sendPasswordReset($email, $name, $resetToken) {
$token = getenv('SAFENODE_TOKEN');
$data = [
'to' => $email,
'template' => 'reset-password',
'variables' => [
'nome' => $name,
'link' => "https://meusite.com/reset?token={$resetToken}",
'expira_em' => '1 hora'
]
];
$ch = curl_init('https://safenode.cloud/api/mail/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [
'success' => $httpCode === 200,
'data' => json_decode($response, true)
];
}
Notificação de Pedido
// Node.js
async function sendOrderConfirmation(order) {
const itemsHTML = order.items.map(item =>
`
${item.name}
R$ ${item.price.toFixed(2)}
${item.quantity}
`
).join('');
return await axios.post(
'https://safenode.cloud/api/mail/send',
{
to: order.customerEmail,
subject: `Pedido #${order.id} confirmado`,
html: `
Pedido Confirmado!
Olá, ${order.customerName}!
Seu pedido #${order.id} foi confirmado.
Produto Preço Qtd
${itemsHTML}
Total: R$ ${order.total.toFixed(2)}
`
},
{
headers: {
'Authorization': 'Bearer ' + process.env.SAFENODE_TOKEN,
'Content-Type': 'application/json'
}
}
);
}
Docker Setup
Use nosso template Docker ou integre em sua stack existente.
docker-compose.yml
version: '3.8'
services:
app:
image: php:8.1-fpm-alpine
volumes:
- ./app:/var/www/html
environment:
- SAFENODE_API_TOKEN=${SAFENODE_API_TOKEN}
depends_on:
- mysql
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./app:/var/www/html:ro
depends_on:
- app
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
.env
SAFENODE_API_TOKEN=seu_token_aqui
DB_ROOT_PASS=senha_forte
DB_NAME=safenode_mail
DB_USER=safenode
DB_PASS=senha_forte
Uso
# Iniciar
docker-compose up -d
# Ver logs
docker-compose logs -f
# Parar
docker-compose down
# Parar e remover volumes
docker-compose down -v
Template completo
Baixe o template completo com nginx, PHP e MySQL configurados em: docker-compose.mail.yml
Pronto para começar?
Crie sua conta grátis e tenha e-mails funcionando em 10 minutos.