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.

DigitalOcean
AWS
cPanel
SafeNode
Plesk
Hostinger
Docker
Quick Start

Comece em minutos

Tenha e-mails funcionando em qualquer VPS em poucos minutos.

1

Obtenha seu token da API

  1. Acesse https://safenode.cloud/mail
  2. Faça login (ou crie uma conta grátis)
  3. Crie um novo projeto de e-mail
  4. Copie o token gerado
2

Instale via script (Linux/Mac/Windows)

curl -o setup-safenode.sh https://safenode.cloud/integration/setup-safenode.sh
sudo bash setup-safenode.sh
3

Configure variáveis de ambiente

cd /opt/safenode-mail
cp .env.example .env
nano .env  # Cole seu token da API
4

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:

Confirmar 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.

${itemsHTML}
ProdutoPreçoQtd

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.