Sendy é uma aplicação de e-mail marketing self-hosted, escrita em PHP, que se destaca por sua leveza e capacidade de entregar volumes massivos de e-mails utilizando serviços de entrega como a Amazon SES. Diferente de plataformas SaaS tradicionais, rodar o Sendy em um servidor próprio (VPS) oferece controle total sobre os dados, privacidade aprimorada e custos previsíveis para grandes listas. Este tutorial técnico detalha a instalação completa do Sendy em um ambiente Linux Ubuntu/Debian, integrando-o com a Amazon Simple Email Service (SES) para garantir alta entregabilidade.
Pré-requisitos de Infraestrutura
Antes de iniciar a instalação, é crucial preparar o ambiente no seu servidor VPS. O Sendy não possui um banco de dados complexo como MySQL ou PostgreSQL; ele utiliza arquivos JSON simples para armazenar listas e campanhas, o que reduz significativamente a carga de memória RAM. No entanto, a entrega depende inteiramente da configuração correta do MTA (Mail Transfer Agent) e das credenciais da AWS.
Você precisará de uma VPS com pelo menos 2GB de RAM para garantir estabilidade durante o processamento de filas de envio. O sistema operacional recomendado é Ubuntu Server 20.04 LTS ou 22.04 LTS, devido à vasta documentação e facilidade de manutenção das dependências PHP e Nginx.
Etapa 1: Configuração do DNS e Amazon SES
A base da performance do Sendy é a integração com a Amazon SES. Você deve ter uma conta AWS ativa e, idealmente, ter solicitado o aumento de cota de envio (Sending Quota) para sair do modo sandbox, permitindo o envio para endereços externos.
Crie um Identity (E-mail ou Domínio) na console da AWS SES. Se você for enviar a partir de @seudominio.com, registre o domínio inteiro na SES. Isso exige a configuração de registros DNS específicos:
- Um registro TXT de verificação de propriedade do domínio.
- Registros DKIM (três CNAMEs) para assinatura criptográfica dos e-mails.
Além disso, configure um Configuration Set na AWS. Isso permite que você receba callbacks de eventos (aberturas, cliques, bounce) via SNS (Simple Notification Service), funcionalidade essencial para o Sendy rastrear métricas em tempo real.
Etapa 2: Preparação do Servidor Web e PHP
O Sendy requer uma stack LEMP (Linux, Nginx, MySQL/MariaDB - opcional para DB, PHP). Embora o Sendy não use banco de dados relacional, ele exige um servidor web robusto. Instale as dependências necessárias via terminal:
sudo apt update
sudo apt install nginx php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-bcmath curl wget unzip -y
O Sendy não usa banco de dados, mas o pacote php-mysql é frequentemente instalado por conveniência em stacks LEMP padrão. Certifique-se de que as extensões PHP estejam habilitadas.
Etapa 3: Download e Instalação do Sendy
Acesse o diretório público do seu servidor web. O Sendy deve ser baixado da plataforma oficial (após compra) ou instalado via script de configuração se você já possui a licença.
cd /var/www/html
wget https://sendy.lemonwire.com/sendy.zip # Exemplo genérico
unzip sendy.zip
rm sendy.zip
Mova os arquivos para o diretório raiz do seu site. A estrutura de pastas é simples:
mv sendy/* ./
rmdir sendy
Agora, defina as permissões corretas. O Sendy precisa gravar arquivos JSON e logs no diretório includes:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html/includes
Etapa 4: Configuração do Nginx
Crie um arquivo de host virtual no Nginx para direcionar o tráfego para o Sendy. Edite o arquivo /etc/nginx/sites-available/sendy:
server {
listen 80;
server_name mail.seudominio.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Ajuste a versão do PHP
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Bloquear acesso direto aos arquivos de includes por segurança
location ~ ^/includes/ {
deny all;
}
}
Habilite o site e teste a configuração:
sudo ln -s /etc/nginx/sites-available/sendy /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Etapa 5: Configuração Inicial do Sendy
Acesse http://mail.seudominio.com/install/index.php. Você será guiado por um assistente de instalação.
- Database: Como o Sendy não usa banco de dados, deixe os campos de banco vazios ou ignore a etapa se o script permitir pular. Ele usará arquivos JSON em
/includes/. - AWS Credentials: Insira sua Access Key ID e Secret Access Key da AWS IAM.
- SES Region: Selecione a região onde você configurou o Identity (ex: us-east-1).
- SNS Topic: Se criou um tópico SNS para eventos, insira o ARN aqui. Isso permite que o Sendy atualize o status dos e-mails (abertos, clicados) automaticamente.
Ao concluir, o sistema criará uma pasta includes com os arquivos de configuração. Nunca compartilhe as credenciais AWS diretamente no código PHP se possível; o Sendy armazena isso localmente, o que é seguro desde que o acesso SSH e FTP ao servidor sejam restritos.
Etapa 6: Configuração do Cron Job (Crucial)
O Sendy não envia e-mails em tempo real. Ele utiliza um sistema de filas processadas por Cron Jobs. Se você não configurar o cron, suas campanhas ficarão presas no status "Pending".
Acesse o painel admin do Sendy, vá em "Settings" > "Cron Job URL". Você verá uma URL específica. No seu servidor VPS, edite o crontab do usuário root ou www-data:
sudo crontab -e
Adicione a linha para rodar a fila de envio a cada minuto (ou a cada 5 minutos, dependendo do volume):
* * * * * curl -s http://mail.seudominio.com/cron/send_campaigns.php > /dev/null 2>&1
Além disso, configure o cron para processar os eventos de bounce e feedback loop (se configurado na AWS):
* * * * * curl -s http://mail.seudominio.com/cron/process_bounce.php > /dev/null 2>&1
Isso garante que o status dos destinatários seja atualizado e que e-mails com erro sejam removidos da lista automaticamente, protegendo sua reputação no SES.
Etapa 7: Segurança e Otimização
Para proteger seu servidor de e-mail marketing, implemente as seguintes medidas:
1. Proteção Anti-Spam Local
Embora o Sendy dependa da AWS para filtragem de spam em larga escala, é boa prática instalar um firewall no nível do sistema. Use o UFW (Uncomplicated Firewall) para permitir apenas tráfego HTTP/HTTPS e SSH:
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable
Para proteção contra bots que tentam acessar o painel admin, considere instalar o Mosparo ou similar como um front-end de proteção, ou restrinja o acesso ao diretório /admin/ via IP na configuração do Nginx.
2. SSL/TLS com Let's Encrypt
Nunca administre e-mails sem HTTPS. Instale o Certbot para garantir criptografia:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d mail.seudominio.com
Comparativo com Alternativas Self-Hosted
No ecossistema de e-mail marketing self-hosted, o Sendy compete diretamente com soluções como Listmonk, Mautic (para automação), Postal Mail Server, Mailtrain, Keila Newsletter e OpenEMM.
Listmonk é uma alternativa moderna escrita em Go, extremamente rápida e leve, usando PostgreSQL. Ele é ideal se você prefere uma stack baseada em banco de dados relacional e deseja uma interface mais moderna "out-of-the-box". No entanto, o Listmonk requer gerenciamento de banco de dados, enquanto o Sendy brilha pela sua simplicidade de arquivos JSON.
Mautic, por outro lado, é um gigante em automação de marketing. Instalar Mautic em VPS é complexo e pesado (requer Symfony, MySQL, Redis). Se seu foco é apenas newsletter e não funis complexos de comportamento do usuário, o Mautic é overkill. O Sendy foca puramente no envio e métricas básicas.
Postal Mail Server é uma alternativa ao Postfix/Dovecot tradicional, excelente para criar um servidor de e-mail completo (SMTP/IMAP) self-hosted. Diferente do Sendy, que é apenas um cliente de envio via SES, o Postal gerencia sua própria infraestrutura de entrega. Isso oferece controle total sobre os logs SMTP, mas exige muito mais manutenção e conhecimento de DNS reverso e reputação de IP.
Mailtrain é uma opção antiga, baseada em Node.js e MongoDB. Embora funcional, a comunidade diminuiu e a instalação pode ser mais frágil em ambientes modernos comparada à estabilidade do PHP/Laravel por trás do Sendy.
Keila Newsletter é uma solução recente, bonita e simples, escrita em Rust/Elixir (via Phoenix). É excelente para pequenas a médias listas e muito fácil de instalar via Docker. Se você busca simplicidade extrema e não precisa da integração profunda com ecossistemas AWS complexos, o Keila é uma ótima escolha.
OpenEMM é uma solução enterprise open-source, extremamente robusta, mas com uma curva de aprendizado íngreme. É indicada para grandes empresas que precisam de conformidade rigorosa e relatórios detalhados sem depender de APIs de terceiros como a AWS SES.
Melhores Práticas de Envio na VPS
Ao usar o Sendy em sua própria VPS com Amazon SES, lembre-se das seguintes diretrizes para manter a saúde do seu servidor:
- Monitore as Taxas de Bounce: A AWS suspende contas que excedem 10% de bounce. Use o cron job do Sendy para processar bounces diariamente.
- Validação de Lista: Antes de importar listas, use ferramentas de validação de e-mail. Limpe sua lista regularmente.
- Rotação de Domínios: Para volumes muito altos (centenas de milhares por dia), configure múltiplos domínios na AWS SES e alterne o envio entre eles para diluir a reputação.
- Backup dos Arquivos Includes: Faça backup diário do diretório
/var/www/html/includes/. É onde residem suas listas, campanhas e configurações de API.
Conclusão
Instalar o Sendy em uma VPS é uma decisão estratégica para empresas que desejam reduzir custos operacionais de e-mail marketing e manter a soberania sobre seus dados. Ao combinar a leveza do PHP com a escalabilidade da Amazon SES, você obtém uma plataforma robusta sem a complexidade de gerenciar servidores SMTP tradicionais.
Este tutorial cobriu desde a preparação do ambiente Linux até a configuração avançada de cron jobs e segurança. Lembre-se de que a manutenção contínua (atualizações de PHP, monitoramento de logs) é essencial para o sucesso a longo prazo. Para quem busca alternativas open-source puras sem dependência de nuvem paga por envio, soluções como Postal ou Listmonk podem ser avaliadas, mas o Sendy permanece como uma das opções mais equilibradas entre custo, performance e facilidade de uso no mercado atual.
Agora que seu servidor está configurado, teste com uma lista pequena de 10 contatos para validar a integridade dos links de rastreamento e as assinaturas DKIM. A partir daí, você estará pronto para escalar suas campanhas com confiança.