Ao alojá-lo você mesmo, o Listmonk corre num VPS que já paga. O envio custa aquilo que o seu relay SMTP cobra por cada mil emails. O número de subscritores não altera nenhum desses valores. É essa mudança estrutural que torna o auto-alojamento vantajoso, mesmo com o tempo de configuração, assim que ultrapassa um plano gratuito gerido.
O Listmonk é um gestor de newsletters open-source escrito em Go. Tem subscritores, listas e campanhas ilimitados pelo custo de um VPS mais uma conta num relay SMTP. Uma coisa tem de ficar clara antes de tocar num único comando: o Listmonk trata de tudo, exceto o envio em si. Se o seu email chega à caixa de entrada ou à pasta de spam depende do relay SMTP que configurar e dos registos DNS que definir no domínio de envio.
O Que Este Guia Aborda
- Implementar o Listmonk e o PostgreSQL com Docker Compose atrás de um proxy reverso Nginx (ou Caddy) com HTTPS
- Escolher o relay SMTP certo para o seu volume e orçamento (Amazon SES, Postmark, Brevo ou outro)
- Configurar SPF, DKIM e DMARC no seu domínio de envio
- Evitar quatro modos de falha em produção que muitas vezes não dão erros claros
- Tempo estimado: 30 minutos se já tiver um VPS e um domínio prontos
- Fora do âmbito: automação de drip, email transacional, configurações com múltiplas instâncias (ver FAQ)
Quando o Listmonk É a Ferramenta Errada
O Listmonk é a resposta certa para uma situação específica. Se a sua situação for diferente, há uma resposta melhor.
Volume abaixo de ~10K emails por mês. Planos gratuitos geridos no Brevo ou no Mailchimp podem ficar mais baratos no total do que um VPS mais um relay SMTP nesta escala. O auto-alojamento começa a compensar assim que ultrapassa essa faixa. Verifique os números face ao seu número real de subscritores e à frequência de envio antes de avançar.
Equipa não técnica. O Mailchimp e o Brevo têm interfaces genuinamente melhores para quem não trabalha num terminal. O Listmonk parte do princípio de que alguém na equipa consegue aceder por SSH a um servidor, ler logs do Docker e interpretar a propagação de DNS. Se essa pessoa não existir, os serviços geridos são a escolha certa.
Precisa de fluxos de automação. O Listmonk envia campanhas. Não suporta sequências de drip, emails acionados por comportamento nem editores visuais de fluxos. Se precisar disso, use o Mautic ou ligue o Listmonk ao n8n para a camada de automação.
Listas de subscritores sensíveis ao GDPR. Se os seus subscritores estiverem sobretudo na UE ou se a sua lista estiver sujeita às regras de residência de dados do GDPR, execute o Listmonk num datacenter europeu. Oferecemos localizações em Frankfurt e Londres que cumprem os requisitos de residência na UE.
O Que Precisa Antes de Começar
O Listmonk, mais o PostgreSQL, mais uma carga moderada de fila precisam de 2 GB de RAM no mínimo. 4 GB é o alvo confortável para produção.
Hardware. Para uma lista pessoal com menos de 50K emails por mês, um VPS com 2 vCPU, 4 GB de RAM e 120 GB de armazenamento NVMe é suficiente. Listas em crescimento com mais de 200K por mês precisam de 4 vCPU e 8 GB de RAM. Corremos esta configuração com Compose num VPS de 4 GB em Frankfurt. Escolha uma localização próxima dos seus subscritores, se puder. A latência de envio não importa muito; a capacidade de resposta do painel de administração importa.
Domínio. Um domínio apontado para o seu VPS através de um registo A. Use um subdomínio para a interface de administração, por exemplo mail.example.com. O domínio de envio e o subdomínio de administração podem ser o mesmo domínio raiz.
Conta de relay SMTP. Ainda não crie nenhuma. A escolha do relay é a decisão mais importante deste guia e depende do seu volume. Avance para a secção "Escolher o Seu Relay SMTP", escolha um fornecedor e volte aqui com o host, a porta, o utilizador e a palavra-passe SMTP em mãos.
Software no VPS. Ubuntu 22.04 LTS ou 24.04 LTS. Docker Engine 24.0 ou superior com o plugin Docker Compose. UFW ou firewall equivalente com as portas 22, 80 e 443 abertas. Acesso SSH como utilizador sudo não-root.
Implementar o Listmonk Com Docker Compose

Crie uma diretoria para a implementação e depois coloque um ficheiro docker-compose.yml com dois serviços: postgres para a base de dados e listmonk para a aplicação. Ambos reiniciam em caso de falha. O Listmonk fica vinculado a 127.0.0.1 para que o proxy reverso seja a única coisa que lhe consegue chegar.
O Ficheiro Docker Compose
I notice you've provided "Here is the" but the sentence appears incomplete. Could you please provide the full text you'd like me to translate to Portuguese? docker-compose.yml. Confirme as tags de imagem exatas e os nomes das variáveis de ambiente face à documentação oficial de instalação do Listmonk. São atualizados a cada nova versão.
# docker-compose.yml
services:
postgres:
image: postgres:16-alpine
container_name: listmonk-postgres
restart: unless-stopped
environment:
POSTGRES_USER: listmonk
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: listmonk
volumes:
- listmonk-postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U listmonk"]
interval: 10s
timeout: 5s
retries: 6
app:
image: listmonk/listmonk:latest
container_name: listmonk-app
restart: unless-stopped
# Bind to loopback only. The reverse proxy is the public entrypoint.
ports:
- "127.0.0.1:9000:9000"
depends_on:
postgres:
condition: service_healthy
environment:
LISTMONK_app__address: "0.0.0.0:9000"
LISTMONK_db__host: postgres
LISTMONK_db__port: 5432
LISTMONK_db__user: listmonk
LISTMONK_db__password: ${POSTGRES_PASSWORD}
LISTMONK_db__database: listmonk
volumes:
listmonk-postgres:
Criar um .env arquivo com POSTGRES_PASSWORD= definido como uma cadeia aleatória longa. Depois inicie a stack e execute a instalação única da base de dados:
# Pull images and start the database first
docker compose up -d postgres
# Run the install step (creates schema and the first admin user)
docker compose run --rm app ./listmonk --install --idempotent --yes
# Start the application
docker compose up -d
O --install O comando pede um email e uma palavra-passe de administrador. Guarde-os. Verifique se ambos os contentores estão a correr:
docker compose ps
Saída esperada: dois serviços listados, ambos com estado Up. A linha do postgres deve mostrar (healthy).
O 127.0.0.1:9000 O vínculo é deliberado. O Listmonk não tem limitador de taxa de autenticação integrado nem listas de IP permitidos. Expor a porta 9000 à internet pública significa que qualquer pessoa no planeta pode aceder ao seu login de administração. O proxy reverso é o que torna esse login acessível apenas por HTTPS.
Proxy Reverso Nginx e SSL
Instale o Nginx e o Certbot a partir dos repositórios do Ubuntu. Crie uma configuração de site em /etc/nginx/sites-available/listmonk com os cabeçalhos de proxy de que o Listmonk precisa para gerar links de campanha corretos:
# /etc/nginx/sites-available/listmonk
server {
listen 80;
server_name mail.example.com;
location / {
proxy_pass http://127.0.0.1:9000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Listmonk streams campaign progress over WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Crie um symlink para sites-enabled, teste a configuração, recarregue o Nginx e depois emita um certificado:
sudo ln -s /etc/nginx/sites-available/listmonk /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d mail.example.com
O Certbot reescreve o bloco do servidor para escutar na porta 443 com o novo certificado e adiciona um redirecionamento de HTTP para HTTPS. Verifique:
curl -I https://mail.example.com
Saída esperada: HTTP/2 200 com um cabeçalho strict-transport-security válido. Se obtiver um ciclo de redirecionamento, verifique se o cabeçalho X-Forwarded-Proto está definido na configuração do Nginx acima. Nove em cada dez vezes, o ciclo é esse cabeçalho.
Se o Listmonk for a única coisa neste VPS, use antes o Caddy. O Caddyfile tem três linhas e trata da renovação do certificado sem precisar de uma tarefa cron:
mail.example.com {
reverse_proxy 127.0.0.1:9000
}
Corrigir o Cabeçalho Message-ID
Por predefinição, o Listmonk usa o hostname do sistema no cabeçalho Message-ID de saída. Se o hostname do seu VPS for localhost ou qualquer coisa que não seja um FQDN válido, o Listmonk envia Message-ID: <[email protected]>. Os filtros de spam do Gmail e do Outlook sinalizam isto imediatamente. Está documentado no tópico 15410 do Cloudron Forum.
A correção é uma linha no config.tomldo Listmonk. Para uma instalação nova, gere o ficheiro através de docker compose run --rm app ./listmonk --new-config. Depois defina:
[app]
hostname = "mail.example.com"
Reinicie o contentor da aplicação depois de editar:
docker compose restart app
Faça isto antes de enviar uma única campanha. Uma lista contaminada com Message-IDs localhost.localdomain é mais difícil de recuperar do que uma que começou limpa.
Dica Profissional
Se preferir saltar a configuração com Compose, veja o nosso VPS Listmonk com um clique para implementar o Listmonk em poucos minutos com um único clique. A instância vem pré-configurada com o PostgreSQL. Continua a precisar de configurar o seu relay SMTP e de adicionar os seus registos DNS. Esses passos não são opcionais, independentemente da forma como faz a implementação.
Escolher o Seu Relay SMTP

Todos os envios passam por um relay que você configura. A reputação de IP do relay, os limites de taxa e o tratamento de bounces são o que determina se o seu email chega à caixa de entrada ou à pasta de spam.
Aqui está a comparação funcional. Os preços e os limites dos planos gratuitos mudam. Confirme cada um na página oficial de preços do fornecedor antes de se comprometer.
| Provedor | Estrutura de custos | Webhooks de bounce | Melhor para |
|---|---|---|---|
| Amazon SES | Por email, muito baixo em volume | Sim, via SNS | Custo em volume; já está na AWS |
| Postmark | Base mensal mais por email | Sim, nativo | Foco na entregabilidade; reputação transacional |
| Brevo | Plano gratuito para volume baixo, planos pagos acima | Sim | Volume baixo com caminho de upgrade |
| Mailgun | Preço por email | Sem endpoint de webhook nativo; use a API de bounce genérica se necessário. | Familiar para programadores |
Foi apenas um olhar rápido sobre cada relay SMTP. Agora vamos abordar cada um em detalhe.
Amazon SES (Ponto de Partida Recomendado)
O SES é a opção mais barata em volume e a mais discutida na comunidade do Listmonk. A configuração tem mais passos do que o Postmark ou o Brevo, mas a diferença de custo por email é grande o suficiente em qualquer volume real para justificar o trabalho.
Configure-o em três fases. Primeiro, crie um utilizador IAM com a política AmazonSESFullAccess (ou uma política personalizada mais restrita apenas com ses:SendRawEmail e ses:GetSendQuota). Segundo, verifique o seu domínio de envio na consola do SES. O SES guia-o pelos CNAMEs de DKIM a adicionar. Terceiro, gere credenciais SMTP no painel de definições SMTP do SES. Estas não são as suas chaves de acesso da AWS; o SES gera um utilizador e uma palavra-passe SMTP específicos e separados quando clica em "Create SMTP credentials."
No painel de administração do Listmonk, em Settings → SMTP, adicione um novo servidor com:
- Anfitrião:
email-smtp.<region>.amazonaws.com(use a região do SES em que verificou o domínio) - Port: 587
- Auth protocol: LOGIN
- TLS: STARTTLS
- Username and password: as credenciais SMTP que o SES gerou
O SES exige STARTTLS na porta 587. Se deixar o TLS definido como none ou escolher a porta 465, o Listmonk liga-se, o SES devolve 530 Must issue a STARTTLS command first, e o teste de credenciais SMTP no painel de administração pode ainda assim mostrar sucesso. Envie um email de teste real para uma caixa de entrada pessoal que controle antes de executar qualquer campanha.
As contas novas do SES começam em modo sandbox. Em sandbox só pode enviar para endereços de email verificados, o que não é útil para uma lista de subscritores. Abra um ticket de suporte na consola do SES para pedir acesso à produção. A aprovação demora normalmente um dia útil.
Postmark (Alternativa com Foco na Entregabilidade)
O Postmark custa mais por email do que o SES, mas tem suporte nativo a webhooks de bounce e uma reputação de altas taxas de entrega na caixa de entrada com políticas de remetente rigorosas. Vale a pena se as suas newsletters forem críticas para o negócio ou se não quiser gerir a aprovação de sandbox para produção do SES.
A configuração do Listmonk tem a mesma forma do SES: host, porta 587, STARTTLS, credenciais a partir do painel de tokens de API do servidor Postmark. Verifique o seu domínio de envio na configuração de assinatura do Postmark, adicione os registos DKIM que o Postmark gera e está pronto para enviar.
Escolha o Postmark quando a entregabilidade importa mais do que o custo por email. Escolha o SES quando o volume importa mais do que a orientação extra.
Um aviso sobre o teste de credenciais SMTP. O teste de ligação no painel de administração do Listmonk reporta sempre sucesso, mesmo com credenciais inválidas. Isto está documentado em alguns issues do GitHub. Não confie nele. Depois de configurar qualquer relay, envie uma campanha para um único subscritor de teste e confirme a receção na caixa de entrada de destino antes de enviar para a sua lista completa.
Evite o Mailersend para o envio de campanhas em massa. O seu limite de 5 emails por ligação produz erros 421 Service not available que o Listmonk regista como enviados, mesmo que a entrega tenha falhado. A campanha parece bem-sucedida no Listmonk e descarta a maior parte das suas mensagens sem aviso.
Fazer o Email Chegar de Verdade: SPF, DKIM e DMARC

Estes são três registos DNS no seu domínio de envio que dizem aos servidores de correio recetores que o seu domínio autorizou este relay a enviar em seu nome. Salte qualquer um deles e uma parte significativa dos seus envios vai para o spam em larga escala, por mais limpo que seja o seu relay ou o seu texto. Adicione-os no seu fornecedor de DNS antes de enviar a primeira campanha.
Registo SPF
O SPF autoriza IPs ou serviços de envio específicos a enviar email pelo seu domínio. Adicione um único registo TXT na raiz do seu domínio de envio com o include do seu relay. No caso do SES, o registo tem este aspeto:
v=spf1 include:amazonses.com ~all
Para o Postmark, substitua o include por include:spf.mtasv.net. Verifique sempre a documentação oficial de SPF do seu relay para o valor exato do include. Muda consoante o fornecedor e, por vezes, consoante a região.
Um domínio só pode ter um registo SPF. Se já tiver um para outro serviço (Google Workspace, Microsoft 365), junte o include ao registo existente em vez de adicionar um segundo.
DKIM
O DKIM anexa uma assinatura criptográfica aos emails de saída, que os servidores recetores verificam contra uma chave pública no seu DNS. O seu relay gera o par de chaves. Você adiciona a chave pública como um registo TXT num subdomínio de seletor (por exemplo, sel1._domainkey.example.com) com o valor exato que o relay lhe der.
O Listmonk não trata da assinatura DKIM. O relay trata. Não há configuração de DKIM específica do Listmonk. Siga o assistente de configuração de DKIM do seu relay, adicione os registos que ele lhe der e aguarde a propagação de DNS (normalmente menos de 30 minutos; por vezes algumas horas).
DMARC
O DMARC diz aos servidores recetores o que fazer com o email que falha as verificações de SPF ou DKIM. Comece em modo de monitorização com p=none para poder ver as falhas nos relatórios agregados sem afetar a entregabilidade enquanto resolve as configurações erradas. Adicione um registo TXT em _dmarc.example.com:
v=DMARC1; p=none; rua=mailto:[email protected]
Ao fim de duas ou três semanas de relatórios limpos, aperte a política para p=quarantine or p=reject. Não salte a fase de monitorização. Um erro no seu include de SPF combinado com p=reject logo no primeiro dia vai destruir o seu próprio email legítimo sem qualquer sinal de que algo correu mal.
O cabeçalho List-Unsubscribe (RFC 8058) é gerado automaticamente pelo Listmonk. Confirme que está ativado em Settings → General. O Gmail e o Apple Mail apresentam este cabeçalho como uma opção de cancelamento de subscrição com um clique, o que protege a reputação do remetente.
O Que Realmente Falha em Produção
Quatro modos de falha que só aparecem quando envia a sua primeira campanha real. Apanhe-os antes dos seus subscritores.
Problema 1: A taxa de bounce não coincide com o número do seu relay. O Listmonk processa os bounces lendo um endereço de email de bounce designado por POP3 e apagando todas as mensagens que lê. Isso inclui respostas de férias, recibos de entrega e notificações de ausência do escritório, todos classificados como bounces. O seu relay só conta as falhas de entrega genuínas devolvidas pelos servidores de correio dos destinatários. Se o SES reportar 0,6% e o Listmonk reportar 4%, é esta a diferença. A correção é configurar callbacks de webhook de bounce em vez de POP3. No SES, use o SNS para entregar as notificações de bounce ao endpoint de webhook do Listmonk. No Postmark, aponte o seu webhook nativo para o mesmo endpoint. Os bounces por webhook são exatos; os bounces por POP3 inflacionam.
Problema 2: O teste de credenciais SMTP diz que teve sucesso quando está errado. Como referido na secção do relay, o teste de ligação reporta sempre sucesso, independentemente da validade das credenciais. Não confie nele. Envie sempre um email de teste real depois de configurar ou alterar qualquer definição SMTP.
Problema 3: Uma campanha para a meio do envio sem erro. O Listmonk marca as campanhas como Finished mesmo quando apenas 60% dos subscritores receberam o email. Os restantes envios foram rejeitados pelo relay ou estrangulados na camada de rede do VPS, e o Listmonk não apresenta nenhum dos casos como um erro ao nível da campanha (tópico 13165 do Cloudron Forum). Se uma campanha mostrar menos envios do que subscritores, abra o painel do seu relay para a janela temporal do envio e compare a contagem de aceites do relay com a do Listmonk. A verdade está no relay.
Problema 4: Ninguém está a fazer backup do PostgreSQL. O volume do Compose mantém os dados entre reinícios. Não protege contra falha do host, um docker volume rm acidental ou atualizações corrompidas. Adicione um pg_dump diário:
0 2 * * * docker exec listmonk-postgres pg_dump -U listmonk listmonk > /backups/listmonk-$(date +\%Y\%m\%d).sql
Execute a linha uma vez à mão primeiro. Verifique se o ficheiro de saída não está vazio antes de confiar na entrada do cron. Um script de backup que escreve um ficheiro de zero bytes sem dar erro é pior do que não ter backup nenhum, porque deixa de pensar nele.
Antes de confiar em qualquer coisa disto em produção, envie uma campanha de teste para um subscritor e confirme a receção na caixa de entrada de destino. Se esse email chegar limpo, os próximos dez mil também vão chegar.
Perguntas frequentes
Porque É Que as Minhas Taxas de Bounce no Listmonk São Mais Altas do Que as Que o Amazon SES Reporta?
O processamento de bounces por POP3 do Listmonk inflaciona as contagens ao ler respostas de ausência e respostas automáticas de férias como bounces. Configure callbacks de webhook do SES via SNS para contagens exatas.
O Listmonk Suporta Emails Transacionais?
O Listmonk é uma ferramenta de newsletters e campanhas de difusão. Não trata nativamente de email transacional (reposições de palavra-passe, confirmações de encomenda, emails acionados um a um). Para email transacional a partir do mesmo domínio de envio, configure separadamente o endpoint transacional do seu relay ou use uma ferramenta dedicada como o Postal ou a API transacional do Postmark juntamente com o Listmonk.
Como Importo os Meus Subscritores do Mailchimp Para o Listmonk?
Exporte a sua lista do Mailchimp como um CSV em Audience → Export Audience. No Listmonk, vá a Subscribers → Import e carregue o CSV. Mapeie as colunas de email e nome quando lhe for pedido. O Listmonk aceita exportações CSV padrão do Mailchimp, do ConvertKit e da maioria das plataformas de newsletters sem conversão de formato.
O Que Acontece Quando Alguém Cancela a Subscrição de Uma Campanha do Listmonk?
O Listmonk adiciona um link de cancelamento de subscrição a cada email de campanha por predefinição. Quando um subscritor clica nele, é adicionado à lista de bloqueios e removido de todas as campanhas futuras. O cabeçalho List-Unsubscribe (RFC 8058) é incluído automaticamente, por isso os clientes de email que suportam cancelamento de subscrição com um clique (Gmail, Apple Mail) apresentam-no nativamente. O registo do subscritor permanece na base de dados para fins de auditoria, mas não lhe serão enviadas mais campanhas.