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 upgradeshutdown -r nowUna 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 409B6B1796C275462A1703113804BB82D39DC0E3Ora installa RVM utilizzando il seguente comando.
curl -sSL https://get.rvm.io | bash -s stablePer utilizzare RVM immediatamente, dovrai eseguire il seguente comando.
source /etc/profile.d/rvm.shOra recupera l’elenco di Ruby utilizzando il seguente comando.
rvm list knownVedrai 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.4Usa la versione di Ruby utilizzando il seguente comando.
rvm use 2.4Puoi verificare la versione di Ruby utilizzando il seguente comando.
ruby -vDovresti 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 bundlergem install procodileInstalla 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-devEsegui i seguenti comandi per avviare MariaDB e abilitarlo all’avvio.
systemctl start mariadbsystemctl enable mariadbOra esegui i seguenti comandi per mettere in sicurezza la tua installazione di MariaDB.
mysql_secure_installationIl 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 -pIl 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 erlangImporta 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 updateOra puoi installare RabbitMQ eseguendo il seguente comando.
apt -y install rabbitmq-serverRabbitMQ è ora installato sul tuo sistema.
Configura RabbitMQ
Puoi avviare il processo del server RabbitMQ eseguendo il seguente comando.
systemctl start rabbitmq-serverPer avviare automaticamente RabbitMQ all’avvio, esegui il seguente comando.
systemctl enable rabbitmq-serverOra esegui il seguente comando per creare un host virtuale per Postal nel server RabbitMQ.
rabbitmqctl add_vhost /postalOra aggiungi un utente RabbitMQ per Postal eseguendo il seguente comando.
rabbitmqctl add_user postal StrongPasswordSostituisci 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 gitPuoi controllare se Git è stato installato correttamente controllando la versione utilizzando il seguente comando.
git --versionDovresti 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 nodejsPuoi controllare se Node.js è stato installato correttamente eseguendo il seguente comando.
nodejs -vDovresti 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 postalIl 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/rubyOra 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/postalOra crea un collegamento simbolico al file binario di Postal eseguendo il seguente comando.
ln -s /opt/postal/bin/postal /usr/bin/postalOra puoi interagire con il tuo server Postal da qualsiasi directory. Per eseguire i comandi successivi dovrai accedere alla shell come utente postal.
su - postalOra dovrai installare tutte le dipendenze ruby necessarie per eseguire l’applicazione.
postal bundle /opt/postal/vendor/bundleUna volta installate le dipendenze, dovrai generare i file di configurazione predefiniti.
postal initialize-configIl 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.ymlTrova 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 initializeCrea l’utente amministratore di Postal eseguendo il seguente comando.
postal make-userIl 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 startPer controllare se i servizi sono stati avviati correttamente, esegui il seguente comando.
postal statusDovresti 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 stopConfigurare 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 certbotUna 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.comUna 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 -eInserisci la seguente riga nel file crontab.
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.logIl 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.confPopola 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 nginxPer abilitare nginx ad avviarsi automaticamente all’avvio, esegui il seguente comando.
systemctl enable nginxOra puoi accedere a Postal navigando al seguente sito web tramite il tuo browser web preferito.
https://mail.example.comConfigurare Postal
Una volta che navighi al sito sopra, vedrai la seguente interfaccia.

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.

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.

Una volta creata l’organizzazione, ti verrà chiesto di creare un nuovo 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.

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.

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.

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

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.

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.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.