Server di Posta · 13 min read · Nov 06, 2025

Come creare un server di posta completo utilizzando Postal

Postal è un server di posta completo, gratuito e open source per inviare e ricevere email. È scritto in Ruby e JavaScript. Puoi facilmente installare Postal sul tuo server. Aiuta anche a fornire le informazioni DNS corrette necessarie per ridurre le email di spam. Postal è utilizzato da molte organizzazioni per inviare e ricevere email quotidianamente.

In questo tutorial, installeremo il server di posta Postal su Ubuntu 17.04.

Prerequisiti

  • Server Ubuntu 17.04 minimale. 8 GB di RAM raccomandati.
  • Privilegi di root. Questa guida è scritta come utente root, se sei connesso come utente sudo, esegui sudo -i.
  • un nome di dominio puntato verso il tuo server.

Aggiorna il sistema di base

Prima di installare qualsiasi pacchetto, è consigliato aggiornare i pacchetti e il repository utilizzando il seguente comando.

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

Una volta aggiornato il sistema, procedi con l’installazione di Ruby.

Installa Ruby

Postal è scritto in Ruby, quindi è necessario installare Ruby 2.3 o superiore sul tuo sistema. In questo tutorial, installeremo l’ultima versione di Ruby utilizzando RVM. Esegui il seguente comando per aggiungere la chiave GPG di RVM sul tuo server.

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

Ora installa RVM utilizzando il seguente comando.

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

Per utilizzare RVM immediatamente, dovrai eseguire il seguente comando.

source /etc/profile.d/rvm.sh

Ora recupera l’elenco di Ruby utilizzando il seguente comando.

rvm list known

Vedrai il seguente output:

# 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

Ora installa l’ultima versione di Ruby nell’elenco utilizzando il seguente comando.

rvm install 2.4

Usa la versione di Ruby utilizzando il seguente comando.

rvm use 2.4

Puoi verificare la versione di Ruby utilizzando il seguente comando.

ruby -v

Dovresti vedere il seguente output se Ruby è stato installato correttamente.

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

Installa Ruby Gems

Per eseguire Postal sul tuo server, dovrai installare bundler e procodile sul tuo server. bundler è un gestore di dipendenze per le applicazioni Ruby gem. procodile è uno strumento di gestione dei processi per le applicazioni Ruby. Installa entrambe le applicazioni utilizzando i seguenti comandi.

gem install bundler
gem install procodile

Installa il server di database MariaDB

MariaDB è un fork del server di database MySQL. MySQL è un software di gestione di database relazionali utilizzato per memorizzare dati in formato tabellare. Per installare MariaDB sul tuo server, esegui:

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

Esegui i seguenti comandi per avviare MariaDB e abilitarlo all’avvio.

systemctl start mariadb
systemctl enable mariadb

Ora esegui i seguenti comandi per mettere in sicurezza la tua installazione di MariaDB.

mysql_secure_installation

Il comando sopra eseguirà uno script per mettere in sicurezza la nuova installazione di MariaDB. Lo script chiederà la password dell’utente root esistente, abbiamo appena installato MariaDB, la password di root non è impostata, premi semplicemente invio per procedere.

Lo script ti chiederà se desideri impostare una password per l’installazione di MariaDB, scegli y e imposta una password forte per l’installazione. La maggior parte delle domande sono autoesplicative e dovresti rispondere sì o y a tutte le domande.

Configura il database per Postal

Per creare un database per Postal, dovremo prima accedere alla riga di comando di MySQL. Esegui il seguente comando per farlo.

mysql -u root -p

Il comando sopra accederà alla shell di MySQL dell’utente root, verrà richiesta la password dell’utente root. Fornisci la password per accedere. Ora esegui la seguente query per creare un nuovo database per la tua installazione di Postal.

CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

La query sopra creerà un nuovo database chiamato postal. Assicurati di utilizzare il punto e virgola alla fine di ogni query poiché la query termina sempre con un punto e virgola.

Ora fornisci tutti i privilegi al tuo utente del database sul database che hai creato. Esegui il seguente comando.

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

Sostituisci StrongPassword con una password molto forte e sicura.

Il database sarà scritto automaticamente da Postal, ma per questo dovremo fornire i permessi appropriati agli utenti di Postal. Esegui il seguente comando per fornire privilegi a tutti gli utenti che iniziano con postal-.

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

Ora esegui il seguente comando per applicare immediatamente le modifiche sui privilegi del database.

FLUSH PRIVILEGES;

Esci dal prompt di MySQL utilizzando il seguente comando.

EXIT;

Installa RabbitMQ

RabbitMQ è scritto in linguaggio Erlang, in questo tutorial installeremo l’ultima versione di Erlang sul server. Installa Erlang utilizzando il seguente comando.

apt -y install erlang

Importa la chiave GPG eseguendo:

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

Ora aggiungi il repository RabbitMQ eseguendo il seguente comando:

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

Aggiorna l’indice del repository eseguendo il seguente comando.

apt update

Ora puoi installare RabbitMQ eseguendo il seguente comando.

apt -y install rabbitmq-server

RabbitMQ è ora installato sul tuo sistema.

Configura RabbitMQ

Puoi avviare il processo del server RabbitMQ eseguendo il seguente comando.

systemctl start rabbitmq-server

Per avviare automaticamente RabbitMQ all’avvio, esegui il seguente comando.

systemctl enable rabbitmq-server

Ora esegui il seguente comando per creare un host virtuale per Postal nel server RabbitMQ.

rabbitmqctl add_vhost /postal

Ora aggiungi un utente RabbitMQ per Postal eseguendo il seguente comando.

rabbitmqctl add_user postal StrongPassword

Sostituisci StrongPassword con una password molto forte.

Ora imposta i permessi appropriati sull’host virtuale RabbitMQ per l’utente RabbitMQ.

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

Installa Git e Node.js

Git sarà utilizzato per recuperare il pacchetto di installazione e alcune dipendenze. Esegui il seguente comando per installare Git sul tuo sistema.

apt -y install git

Puoi controllare se Git è stato installato correttamente controllando la versione utilizzando il seguente comando.

git --version

Dovresti ottenere il seguente output.

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

Node.js sarà utilizzato per compilare la libreria JavaScript. Installa il software utilizzando il seguente comando.

apt -y install nodejs

Puoi controllare se Node.js è stato installato correttamente eseguendo il seguente comando.

nodejs -v

Dovresti ottenere il seguente output.

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

Ora che abbiamo tutte le dipendenze pronte, puoi installare Postal.

Installa Postal

Postal dovrebbe essere eseguito come utente isolato. Esegui il seguente comando per creare un nuovo utente.

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

Il comando sopra creerà un nuovo utente con nome utente postal e la home directory è impostata su /opt/postal.

Consenti a Ruby di ascoltare le porte privilegiate eseguendo il seguente comando.

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

Ora che tutto è pronto, scarica l’archivio più recente di Postal ed estrai l’archivio come utente Postal utilizzando il seguente comando.

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

Ora crea un collegamento simbolico al file binario di Postal eseguendo il seguente comando.

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

Ora puoi interagire con il tuo server Postal da qualsiasi directory. Per eseguire i comandi successivi dovrai accedere alla shell come utente postal.

su - postal

Ora dovrai installare tutte le dipendenze ruby necessarie per eseguire l’applicazione.

postal bundle /opt/postal/vendor/bundle

Una volta installate le dipendenze, dovrai generare i file di configurazione predefiniti.

postal initialize-config

Il comando sopra genererà la configurazione richiesta per la tua installazione di Postal, inclusi vari chiavi e certificati. Questo genererà anche il file di configurazione postal.yml predefinito. Dovresti ottenere il seguente output.

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

Ora dovrai configurare alcune opzioni nel file di configurazione postal.yml.

nano /opt/postal/config/postal.yml

Trova la seguente riga:

web:
  # L'host su cui sarà disponibile l'interfaccia di gestione
  host: postal.example.com

Cambia il nome host con il tuo nome di dominio effettivo. Inoltre, trova le seguenti righe.

main_db:
  # Specifica i dettagli di connessione per il tuo database MySQL
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  database: postal

message_db:
  # Specifica i dettagli di connessione per il tuo server MySQL che ospiterà i
  # database dei messaggi per i server di posta.
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  prefix: postal

Cambia il nome utente, la password e il nome del database in base al database che hai creato. Inoltre, trova queste righe:

rabbitmq:
  # Specifica i dettagli di connessione per il tuo server RabbitMQ.
  host: 127.0.0.1
  username: postal
  password: StrongPassword
  vhost: /postal

Cambia la configurazione sopra in base all’host virtuale e all’utente creati per RabbitMQ. Successivamente, trova le configurazioni DNS.

dns:
  # Specifica il record DNS che hai configurato. Fai riferimento alla documentazione su
  # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration per ulteriori
  # informazioni su questi.
  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

Cambia i domini sopra con i domini effettivi che desideri utilizzare con il server di posta.

Salva il file ed esci dall’editor. Ora, inizializza il database e altri asset eseguendo:

postal initialize

Crea l’utente amministratore di Postal eseguendo il seguente comando.

postal make-user

Il comando sopra ti chiederà l’indirizzo email, il nome utente e la password. Il comando sopra genererà il seguente output.

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]

La configurazione della riga di comando di Postal è ora terminata, puoi avviare il server utilizzando il seguente comando.

postal start

Per controllare se i servizi sono stati avviati correttamente, esegui il seguente comando.

postal status

Dovresti ottenere il seguente output.

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:-

Per fermare Postal, puoi sempre eseguire il seguente comando.

postal stop

Configurare Nginx come Reverse Proxy

Per motivi di sicurezza, l’interfaccia web e l’API di Postal dovrebbero essere dietro a qualsiasi server web di produzione come Apache o Nginx. In questo tutorial, installeremo e configureremo Nginx come reverse proxy.

Installa il server web Nginx eseguendo il seguente comando.

apt -y install nginx

È consigliato utilizzare SSL per accedere a Nginx. Puoi utilizzare un certificato autofirmato o un certificato SSL gratuito di Let’s Encrypt o un certificato commerciale. In questo tutorial, utilizzeremo il certificato SSL gratuito di Let’s Encrypt.

Installa il client di Let’s Encrypt noto anche come certbot eseguendo il seguente comando.

apt -y install certbot

Una volta completata l’installazione, esegui il seguente comando per ottenere certificati dall’autorità di certificazione Let’s Encrypt. Assicurati che il nome di dominio sia puntato verso il tuo server poiché certbot controllerà l’autorità del dominio prima di fornire i certificati. Sostituisci mail.example.com con il tuo nome di dominio effettivo.

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

Una volta generati i certificati, saranno memorizzati in /etc/letsencrypt/live/mail.example.com.

Il certificato SSL di Let’s Encrypt scade in 90 giorni, quindi è consigliato impostare un rinnovo automatico per i tuoi certificati. Esegui il seguente comando per aprire il tuo file crontab.

crontab -e

Inserisci la seguente riga nel file crontab.

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

Il cron job sopra verrà eseguito automaticamente ogni lunedì alle 1:30 AM e se i tuoi certificati sono in scadenza, verranno rinnovati automaticamente.

Ora crea un nuovo blocco del server per il tuo sito web eseguendo il seguente comando.

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

Popola il file con il seguente contenuto.

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;
    }
}

Salva il file ed esci dall’editor. Ora riavvia il server web nginx eseguendo.

systemctl restart nginx

Per abilitare nginx ad avviarsi automaticamente all’avvio, esegui il seguente comando.

systemctl enable nginx

Ora puoi accedere a Postal navigando al seguente sito web tramite il tuo browser web preferito.

https://mail.example.com

Configurare Postal

Una volta che navighi al sito sopra, vedrai la seguente interfaccia.

Accesso a Postal

Inserisci l’indirizzo email e la password dell’utente che hai creato in precedenza. Una volta effettuato l’accesso, ti verrà chiesto di creare una nuova organizzazione.

Aggiungi organizzazione in Postal

Fornisci il nome dell’organizzazione. Puoi scegliere di utilizzare il nome breve generato automaticamente o specificarne uno tu stesso. I nomi brevi vengono utilizzati come nome utente durante l’autenticazione con il server SMTP. Dovrebbe contenere solo lettere, numeri e trattini.

Inserisci nome organizzazione

Una volta creata l’organizzazione, ti verrà chiesto di creare un nuovo server di posta.

Aggiungi server di posta

Fornisci il nome, il nome breve e la modalità del server email. In modalità Live, tutte le email vengono instradate e consegnate normalmente, ma in modalità di sviluppo, sono visibili solo nell’interfaccia web.

Crea un nuovo server di posta

Una volta aggiunto il server di posta, dovrai aggiungere un nuovo dominio nel server di posta. Clicca sulla scheda Domini e crea un nuovo nome di dominio.

Aggiungi dominio

Una volta aggiunto il nome di dominio, dovrai configurare il DNS per il dominio. Dovrai aggiungere due record TXT per SPF e DKIM. Dovrai anche aggiungere un record CNAME e un record MX per il percorso di ritorno e la consegna della posta. Una volta configurato il DNS, clicca sul pulsante Controlla che i miei record siano corretti per verificare la configurazione DNS.

Configura record MX

Ora dovrai creare delle credenziali SMTP per inviare e ricevere email.

Dettagli SMTP

Scegli il tipo come SMTP o API. Fornisci il nome per le credenziali SMTP, scegli come desideri gestire l’indirizzo email.

Una volta fatto, puoi tornare alla scheda Panoramica e vedrai le informazioni necessarie per inviare o ricevere l’indirizzo email.

Invio email con Postal

Conclusione

In questo tutorial, abbiamo configurato con successo un server di posta completo utilizzando Postal su Ubuntu 17.04. Puoi utilizzare il server di posta per inviare e ricevere le email della tua organizzazione.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.