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 upgradeshutdown -r nowUma 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 409B6B1796C275462A1703113804BB82D39DC0E3Agora instale o RVM usando o seguinte comando.
curl -sSL https://get.rvm.io | bash -s stablePara usar o RVM imediatamente, você precisará executar o seguinte comando.
source /etc/profile.d/rvm.shAgora busque a lista de Ruby usando o seguinte comando.
rvm list knownVocê 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.4Use a versão do Ruby usando o seguinte comando.
rvm use 2.4Você pode verificar a versão do Ruby usando o seguinte comando.
ruby -vVocê 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 bundlergem install procodileInstalar 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-devExecute os seguintes comandos para iniciar o MariaDB e habilitá-lo para iniciar na inicialização.
systemctl start mariadbsystemctl enable mariadbAgora execute os seguintes comandos para proteger sua instalação do MariaDB.
mysql_secure_installationO 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 -pO 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 erlangImporte 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 updateAgora você pode instalar o RabbitMQ executando o seguinte comando.
apt -y install rabbitmq-serverRabbitMQ agora está instalado em seu sistema.
Configurar RabbitMQ
Você pode iniciar o processo do servidor RabbitMQ executando o seguinte comando.
systemctl start rabbitmq-serverPara iniciar automaticamente o RabbitMQ na inicialização, execute o seguinte comando.
systemctl enable rabbitmq-serverAgora execute o seguinte comando para criar um host virtual para o Postal no servidor RabbitMQ.
rabbitmqctl add_vhost /postalAgora adicione um usuário RabbitMQ para o Postal executando o seguinte comando.
rabbitmqctl add_user postal StrongPasswordSubstitua 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 gitVocê pode verificar se o Git está instalado com sucesso verificando a versão usando o seguinte comando.
git --versionVocê 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 nodejsVocê pode verificar se o Node.js está instalado com sucesso executando o seguinte comando.
nodejs -vVocê 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 postalO 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/rubyAgora 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/postalAgora crie um link simbólico para o arquivo binário do Postal executando o seguinte comando.
ln -s /opt/postal/bin/postal /usr/bin/postalAgora 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 - postalAgora você precisará instalar todas as dependências do Ruby necessárias para executar o aplicativo.
postal bundle /opt/postal/vendor/bundleUma vez que as dependências tenham sido instaladas, você precisará gerar os arquivos de configuração padrão.
postal initialize-configO 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.ymlEncontre 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 initializeCrie o usuário administrador do Postal executando o seguinte comando.
postal make-userO 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 startPara verificar se os serviços foram iniciados corretamente, execute o seguinte comando.
postal statusVocê 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 stopConfigurando 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 certbotUma 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.comUma 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 -eInsira a seguinte linha no arquivo crontab.
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.logO 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.confPreencha 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 nginxPara habilitar o nginx para iniciar automaticamente na inicialização, execute o seguinte comando.
systemctl enable nginxAgora você pode acessar o Postal navegando pelo seguinte site através do seu navegador web favorito.
https://mail.example.comConfigurando o Postal
Uma vez que você navegue até o site acima, você verá a seguinte interface.

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.

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.

Uma vez que a organização é criada, você será solicitado a criar um novo 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.

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.

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.

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

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.

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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.