Servidor de Email · 14 min read · Nov 06, 2025

Como Criar um Servidor de Email Completo Usando Postal

Postal é um servidor de email completo, gratuito e de código aberto para enviar e receber emails. É escrito em Ruby e JavaScript. Você pode facilmente instalar o Postal em seu próprio servidor. Ele também ajuda a fornecer as informações corretas de DNS necessárias para reduzir emails de spam. O Postal é usado por muitas organizações para enviar e receber emails diariamente.

Neste tutorial, vamos instalar o Servidor de Email Postal no Ubuntu 17.04.

Pré-requisitos

  • Servidor Ubuntu 17.04 mínimo. 8 GB de RAM recomendado.
  • Privilégios de root. Este guia é escrito como usuário root, se você estiver logado como usuário sudo, execute sudo -i.
  • um nome de domínio apontando para o seu servidor.

Atualizar Sistema Base

Antes de instalar qualquer pacote, é recomendado que você atualize os pacotes e o repositório usando o seguinte comando.

apt update && apt -y upgrade
shutdown -r now

Uma vez que seu sistema esteja atualizado, prossiga para instalar o Ruby.

Instalar Ruby

O Postal é escrito em Ruby, portanto, é necessário instalar o Ruby 2.3 ou superior em seu sistema. Neste tutorial, vamos instalar a versão mais recente do Ruby usando o RVM. Execute o seguinte comando para adicionar a chave GPG do RVM em seu servidor.

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

Agora instale o RVM usando o seguinte comando.

curl -sSL https://get.rvm.io | bash -s stable

Para usar o RVM imediatamente, você precisará executar o seguinte comando.

source /etc/profile.d/rvm.sh

Agora busque a lista de Ruby usando o seguinte comando.

rvm list known

Você verá a seguinte saída:

# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.6]
[ruby-]2.3[.3]
[ruby-]2.4[.0]
ruby-head

Agora instale a versão mais recente do Ruby na lista usando o seguinte comando.

rvm install 2.4

Use a versão do Ruby usando o seguinte comando.

rvm use 2.4

Você pode verificar a versão do Ruby usando o seguinte comando.

ruby -v

Você deve ver a seguinte saída se o Ruby estiver instalado com sucesso.

root@ubuntu:~# ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

Instalar Ruby Gems

Para executar o Postal em seu servidor, você precisará instalar o bundler e o procodile em seu servidor. O bundler é um gerenciador de dependências para aplicações Ruby gem. O procodile é uma ferramenta de gerenciamento de processos para aplicações Ruby. Instale ambos os aplicativos usando os seguintes comandos.

gem install bundler
gem install procodile

Instalar Servidor de Banco de Dados MariaDB

MariaDB é um fork do servidor de banco de dados MySQL. O MySQL é um software de sistema de gerenciamento de banco de dados relacional usado para armazenar dados em formato tabular. Para instalar o MariaDB em seu servidor, execute:

apt -y install mariadb-client mariadb-server libmysqlclient-dev

Execute os seguintes comandos para iniciar o MariaDB e habilitá-lo para iniciar na inicialização.

systemctl start mariadb
systemctl enable mariadb

Agora execute os seguintes comandos para proteger sua instalação do MariaDB.

mysql_secure_installation

O comando acima executará um script para proteger a nova instalação do MariaDB. O script pedirá a senha do usuário root existente, acabamos de instalar o MariaDB, a senha root não está definida, apenas pressione enter para prosseguir.

O script perguntará se você deseja definir uma senha root para sua instalação do MariaDB, escolha y e defina uma senha forte para a instalação. A maioria das perguntas são autoexplicativas e você deve responder sim ou y a todas as perguntas.

Configurar Banco de Dados para Postal

Para criar um banco de dados para o Postal, precisaremos fazer login na linha de comando do MySQL primeiro. Execute o seguinte comando para isso.

mysql -u root -p

O comando acima fará login no shell do MySQL do usuário root, ele solicitará a senha do usuário root. Forneça a senha para fazer login. Agora execute a seguinte consulta para criar um novo banco de dados para sua instalação do Postal.

CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

A consulta acima criará um novo banco de dados chamado postal. Certifique-se de usar ponto e vírgula no final de cada consulta, pois a consulta sempre termina com um ponto e vírgula.

Agora forneça todos os privilégios ao seu usuário de banco de dados sobre o banco de dados que você criou. Execute o seguinte comando.

GRANT ALL ON `postal`.* TO `postal`@`127.0.0.1` IDENTIFIED BY "StrongPassword";

Substitua StrongPassword por uma senha muito forte e segura.

O banco de dados será escrito automaticamente pelo Postal, mas para isso, precisaremos fornecer permissões apropriadas aos usuários do Postal. Execute o seguinte comando para fornecer privilégios a todos os usuários que começam com postal-.

GRANT ALL PRIVILEGES ON `postal-%` . * to `postal`@`127.0.0.1`  IDENTIFIED BY "StrongPassword";

Agora execute o seguinte comando para aplicar imediatamente as alterações nos privilégios do banco de dados.

FLUSH PRIVILEGES;

Saia do prompt do MySQL usando o seguinte comando.

EXIT;

Instalar RabbitMQ

RabbitMQ é escrito na linguagem Erlang, neste tutorial vamos instalar a versão mais recente do Erlang no servidor. Instale o Erlang usando o seguinte comando.

apt -y install erlang

Importe a chave GPG executando:

curl -sL https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -

Agora adicione o repositório RabbitMQ executando o seguinte comando:

add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'

Atualize o índice do repositório executando o seguinte comando.

apt update

Agora você pode instalar o RabbitMQ executando o seguinte comando.

apt -y install rabbitmq-server

RabbitMQ agora está instalado em seu sistema.

Configurar RabbitMQ

Você pode iniciar o processo do servidor RabbitMQ executando o seguinte comando.

systemctl start rabbitmq-server

Para iniciar automaticamente o RabbitMQ na inicialização, execute o seguinte comando.

systemctl enable rabbitmq-server

Agora execute o seguinte comando para criar um host virtual para o Postal no servidor RabbitMQ.

rabbitmqctl add_vhost /postal

Agora adicione um usuário RabbitMQ para o Postal executando o seguinte comando.

rabbitmqctl add_user postal StrongPassword

Substitua StrongPassword por uma senha muito forte.

Agora defina as permissões apropriadas no host virtual do RabbitMQ para o usuário RabbitMQ.

rabbitmqctl set_permissions -p /postal postal ".*" ".*" ".*"

Instalar Git e Node.js

O Git será usado para recuperar o pacote do instalador e algumas dependências. Execute o seguinte comando para instalar o Git em seu sistema.

apt -y install git

Você pode verificar se o Git está instalado com sucesso verificando a versão usando o seguinte comando.

git --version

Você deve obter a seguinte saída.

root@ubuntu:~# git --version
git version 2.11.0

O Node.js será usado para compilar a biblioteca JavaScript. Instale o software usando o seguinte comando.

apt -y install nodejs

Você pode verificar se o Node.js está instalado com sucesso executando o seguinte comando.

nodejs -v

Você deve obter a seguinte saída.

root@ubuntu:~# nodejs -v
v4.7.2

Agora que temos todas as dependências prontas, você pode instalar o Postal.

Instalar Postal

O Postal deve ser executado como seu próprio usuário isolado. Execute o seguinte comando para criar um novo usuário.

useradd -r -m -d /opt/postal -s /bin/bash postal

O comando acima criará um novo usuário com o nome de usuário postal e o diretório home é definido como /opt/postal.

Permita que o Ruby escute em portas privilegiadas executando o seguinte comando.

setcap 'cap_net_bind_service=+ep' /usr/local/rvm/rubies/ruby-2.4.0/bin/ruby

Agora que tudo está pronto, baixe o arquivo compactado mais recente do Postal e extraia o arquivo como o usuário Postal usando o seguinte comando.

wget https://postal.atech.media/packages/stable/latest.tgz -O - | sudo -u postal tar zxpv -C /opt/postal

Agora crie um link simbólico para o arquivo binário do Postal executando o seguinte comando.

ln -s /opt/postal/bin/postal /usr/bin/postal

Agora você pode interagir com seu servidor Postal de qualquer diretório. Para executar os próximos comandos, você precisará fazer login no shell como usuário postal.

su - postal

Agora você precisará instalar todas as dependências do Ruby necessárias para executar o aplicativo.

postal bundle /opt/postal/vendor/bundle

Uma vez que as dependências tenham sido instaladas, você precisará gerar os arquivos de configuração padrão.

postal initialize-config

O comando acima gerará a configuração necessária para sua instalação do Postal, incluindo várias chaves e certificados. Isso também gerará o arquivo de configuração postal.yml padrão. Você deve obter a seguinte saída.

postal@ubuntu:~$ postal initialize-config
Created example config file at /opt/postal/config/postal.yml
Created new private key for Let's Encrypt
Created new signing key for DKIM & HTTP requests
Created new private key for default fast server TLS connections
Created new self signed certificate for default fast server TLS connections

Agora você precisará configurar algumas opções no arquivo de configuração postal.yml.

nano /opt/postal/config/postal.yml

Encontre a seguinte linha:

web:
  # O host que a interface de gerenciamento estará disponível
  host: postal.example.com

Altere o nome do host para o seu nome de domínio real. Além disso, encontre as seguintes linhas.

main_db:
  # Especifique os detalhes da conexão para seu banco de dados MySQL
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  database: postal

message_db:
  # Especifique os detalhes da conexão para seu servidor MySQL que abrigará os
  # bancos de dados de mensagens para servidores de email.
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  prefix: postal

Altere o nome de usuário, a senha e o nome do banco de dados de acordo com o banco de dados que você criou. Além disso, encontre estas linhas:

rabbitmq:
  # Especifique os detalhes da conexão para seu servidor RabbitMQ.
  host: 127.0.0.1
  username: postal
  password: StrongPassword
  vhost: /postal

Altere a configuração acima de acordo com o vhost e o usuário criado para o RabbitMQ. Em seguida, encontre as configurações de DNS.

dns:
  # Especifica o registro DNS que você configurou. Consulte a documentação em
  # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration para mais
  # informações sobre isso.
  mx_records:
    - mx.postal.example.com
  smtp_server_hostname: postal.example.com
  spf_include: spf.postal.example.com
  return_path: rp.postal.example.com
  route_domain: routes.postal.example.com
  track_domain: track.postal.example.com

Altere os domínios acima pelos domínios reais que você deseja usar com o servidor de email.

Salve o arquivo e saia do editor. Agora, inicialize o banco de dados e outros ativos executando:

postal initialize

Crie o usuário administrador do Postal executando o seguinte comando.

postal make-user

O comando acima pedirá seu endereço de email, nome de usuário e senha. O comando acima gerará a seguinte saída.

postal@ubuntu:~$ postal make-user
Postal User Creator
Enter the information required to create a new Postal user.
This tool is usually only used to create your initial admin user.

E-Mail Address      : [email protected]
First Name          : Liptan
Last Name           : Biswas
Initial Password:   : **************

User has been created with e-mail address [email protected]

A configuração da linha de comando do Postal agora está concluída, você pode iniciar o servidor usando o seguinte comando.

postal start

Para verificar se os serviços foram iniciados corretamente, execute o seguinte comando.

postal status

Você deve obter a seguinte saída.

postal@ubuntu:~$ postal status
Procodile Version   1.0.17
Application Root    /opt/postal
Supervisor PID      5319
Started             2017-07-21 07:26:19 +0000

|| web
|| Quantity            1
|| Command             bundle exec puma -C config/puma.rb
|| Respawning          5 every 3600 seconds
|| Restart mode        usr1
|| Log path            none specified
|| Address/Port        none
|| => web.1            Running      07:26        pid:5325     respawns:0      port:-        tag:-

|| worker
|| Quantity            1
|| Command             bundle exec ruby script/worker.rb
|| Respawning          5 every 3600 seconds
|| Restart mode        start-term
|| Log path            none specified
|| Address/Port        none
|| => worker.1         Running      07:26        pid:5327     respawns:0      port:-        tag:-

|| cron
|| Quantity            1
|| Command             bundle exec rake postal:cron
|| Respawning          5 every 3600 seconds
|| Restart mode        term-start
|| Log path            none specified
|| Address/Port        none
|| => cron.1           Running      07:26        pid:5329     respawns:0      port:-        tag:-

|| smtp
|| Quantity            1
|| Command             bundle exec rake postal:smtp_server
|| Respawning          5 every 3600 seconds
|| Restart mode        usr1
|| Log path            none specified
|| Address/Port        none
|| => smtp.1           Running      07:26        pid:5332     respawns:0      port:-        tag:-

|| requeuer
|| Quantity            1
|| Command             bundle exec rake postal:requeuer
|| Respawning          5 every 3600 seconds
|| Restart mode        term-start
|| Log path            none specified
|| Address/Port        none
|| => requeuer.1       Running      07:26        pid:5334     respawns:0      port:-        tag:-

Para parar o Postal, você pode sempre executar o seguinte comando.

postal stop

Configurando Nginx como Proxy Reverso

Por razões de segurança, a interface web e a API do Postal devem estar atrás de qualquer servidor web de produção, como Apache ou Nginx. Neste tutorial, vamos instalar e configurar o Nginx como um proxy reverso.

Instale o servidor web Nginx executando o seguinte comando.

apt -y install nginx

É recomendado usar SSL para acessar o Nginx. Você pode usar um certificado autoassinado ou o certificado SSL gratuito do Let’s Encrypt ou um certificado comercial. Neste tutorial, usaremos o SSL gratuito do Let’s Encrypt.

Instale o cliente do Let’s Encrypt, também conhecido como certbot, executando o seguinte comando.

apt -y install certbot

Uma vez que a instalação termine, execute o seguinte comando para obter certificados da autoridade certificadora Let’s Encrypt. Certifique-se de que o nome do domínio esteja apontando para o seu servidor, pois o certbot verificará a autoridade do domínio antes de fornecer os certificados. Substitua mail.example.com pelo seu nome de domínio real.

certbot certonly --standalone -d mail.example.com

Uma vez que os certificados sejam gerados, eles serão armazenados em /etc/letsencrypt/live/mail.example.com.

O SSL do Let’s Encrypt expira em 90 dias, portanto, é recomendável definir uma renovação automática para seus certificados. Execute o seguinte comando para abrir seu arquivo crontab.

crontab -e

Insira a seguinte linha no arquivo crontab.

30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

O trabalho cron acima será executado automaticamente toda segunda-feira às 1:30 AM e, se seus certificados estiverem prestes a expirar, eles serão renovados automaticamente.

Agora crie um novo bloco de servidor para seu site executando o seguinte comando.

nano /etc/nginx/conf.d/mail.example.com.conf

Preencha o arquivo com o seguinte conteúdo.

server {
    listen [::]:80;
    listen 0.0.0.0:80;
    server_name mail.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen [::]:443 ssl;
    listen 0.0.0.0:443 ssl;
    root /opt/postal/public;
    server_name mail.example.com;
    ssl_certificate      /etc/letsencrypt/live/mail.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/mail.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;

    location / {
       client_max_body_size 50M;
       try_files $uri $uri/index.html $uri.html @puma;
    }

    location /assets {
       add_header Cache-Control max-age=3600;
    }

    location @puma {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://127.0.0.1:5000;
    }
}

Salve o arquivo e saia do editor. Agora reinicie o servidor web nginx executando.

systemctl restart nginx

Para habilitar o nginx para iniciar automaticamente na inicialização, execute o seguinte comando.

systemctl enable nginx

Agora você pode acessar o Postal navegando pelo seguinte site através do seu navegador web favorito.

https://mail.example.com

Configurando o Postal

Uma vez que você navegue até o site acima, você verá a seguinte interface.

Login do Postal

Digite o endereço de email e a senha do usuário que você criou anteriormente. Uma vez logado, você será solicitado a criar uma nova organização.

Adicionar Organização no Postal

Forneça o nome da organização. Você pode optar por usar o nome curto gerado automaticamente ou pode especificar um você mesmo. Os nomes curtos são usados como nome de usuário ao autenticar com o servidor SMTP. Deve conter apenas letras, números e hífen.

Digite o nome da Organização

Uma vez que a organização é criada, você será solicitado a criar um novo servidor de email.

Adicionar Servidor de Email

Forneça o nome, nome curto e modo do servidor de email. No modo Live, todos os emails são roteados e entregues normalmente, mas no modo de desenvolvimento, eles são visíveis apenas na interface web.

Criar um Novo Servidor de Email

Uma vez que você adicionou o servidor de email, precisará adicionar um novo domínio no servidor de email. Clique na aba Domínios e crie um novo nome de domínio.

Adicionar Domínio

Uma vez que você adicionou o nome do domínio, precisará configurar o DNS para o domínio. Você precisará adicionar dois registros TXT para SPF e DKIM. Você também precisará adicionar um registro CNAME e um registro MX para o caminho de retorno e entrega de email. Uma vez que você configurar o DNS, clique no botão Verificar se meus registros estão corretos para verificar a configuração do DNS.

Configurar Registro MX

Agora você precisará criar credenciais SMTP para enviar e receber emails.

Detalhes SMTP

Escolha o tipo como SMTP ou API. Forneça o nome para as credenciais SMTP, escolha como deseja lidar com o endereço de email.

Uma vez feito, você pode voltar para a aba Visão Geral e verá as informações necessárias para enviar ou receber o endereço de email.

Enviando email com Postal

Conclusão

Neste tutorial, configuramos com sucesso um servidor de email completo usando o Postal no Ubuntu 17.04. Você pode usar o servidor de email para enviar e receber os emails de sua organização.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.