Serveur de messagerie · 14 min read · Nov 06, 2025

Comment créer un serveur de messagerie complet avec Postal

Postal est un serveur de messagerie complet, gratuit et open source pour l’envoi et la réception d’e-mails. Il est écrit en Ruby et JavaScript. Vous pouvez facilement installer Postal sur votre propre serveur. Il vous aide également à fournir les informations DNS correctes nécessaires pour réduire les e-mails indésirables. Postal est utilisé par de nombreuses organisations pour envoyer et recevoir des courriers quotidiennement.

Dans ce tutoriel, nous allons installer le serveur de messagerie Postal sur Ubuntu 17.04.

Prérequis

  • Serveur minimal Ubuntu 17.04. 8 Go de RAM recommandé.
  • Privilèges root. Ce guide est écrit en tant qu’utilisateur root, si vous êtes connecté en tant qu’utilisateur sudo, exécutez sudo -i.
  • un nom de domaine pointant vers votre serveur.

Mettre à jour le système de base

Avant d’installer un package, il est recommandé de mettre à jour les packages et le dépôt en utilisant la commande suivante.

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

Une fois votre système mis à jour, procédez à l’installation de Ruby.

Installer Ruby

Postal est écrit en Ruby, il est donc nécessaire d’installer Ruby 2.3 ou supérieur sur votre système. Dans ce tutoriel, nous allons installer la dernière version de Ruby en utilisant RVM. Exécutez la commande suivante pour ajouter la clé GPG de RVM sur votre serveur.

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

Maintenant, installez RVM en utilisant la commande suivante.

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

Pour utiliser RVM immédiatement, vous devrez exécuter la commande suivante.

source /etc/profile.d/rvm.sh

Maintenant, récupérez la liste des Ruby en utilisant la commande suivante.

rvm list known

Vous verrez la sortie suivante :

# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # sécurité publiée sur la tête
[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

Maintenant, installez la dernière version de Ruby dans la liste en utilisant la commande suivante.

rvm install 2.4

Utilisez la version de Ruby en utilisant la commande suivante.

rvm use 2.4

Vous pouvez vérifier la version de Ruby en utilisant la commande suivante.

ruby -v

Vous devriez voir la sortie suivante si Ruby est installé avec succès.

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

Installer Ruby Gems

Pour exécuter Postal sur votre serveur, vous devrez installer bundler et procodile sur votre serveur. bundler est un gestionnaire de dépendances pour les applications Ruby gem. procodile est un outil de gestion des processus pour les applications Ruby. Installez les deux applications en utilisant les commandes suivantes.

gem install bundler
gem install procodile

Installer le serveur de base de données MariaDB

MariaDB est un fork du serveur de base de données MySQL. MySQL est un logiciel de système de gestion de base de données relationnelle utilisé pour stocker des données sous forme tabulaire. Pour installer MariaDB sur votre serveur, exécutez :

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

Exécutez les commandes suivantes pour démarrer MariaDB et l’activer pour qu’il démarre au démarrage.

systemctl start mariadb
systemctl enable mariadb

Maintenant, exécutez les commandes suivantes pour sécuriser votre installation de MariaDB.

mysql_secure_installation

La commande ci-dessus exécutera un script pour sécuriser une nouvelle installation de MariaDB. Le script vous demandera le mot de passe de l’utilisateur root existant, nous venons d’installer MariaDB, le mot de passe root n’est pas défini, appuyez simplement sur entrer pour continuer.

Le script vous demandera si vous souhaitez définir un mot de passe root pour votre installation de MariaDB, choisissez y et définissez un mot de passe fort pour l’installation. La plupart des questions sont explicites et vous devriez répondre oui ou y à toutes les questions.

Configurer la base de données pour Postal

Pour créer une base de données pour Postal, nous devrons d’abord nous connecter à la ligne de commande MySQL. Exécutez la commande suivante pour cela.

mysql -u root -p

La commande ci-dessus se connectera au shell MySQL de l’utilisateur root, il vous demandera le mot de passe de l’utilisateur root. Fournissez le mot de passe pour vous connecter. Maintenant, exécutez la requête suivante pour créer une nouvelle base de données pour votre installation de Postal.

CREATE DATABASE postal CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

La requête ci-dessus créera une nouvelle base de données nommée postal. Assurez-vous d’utiliser un point-virgule à la fin de chaque requête car la requête se termine toujours par un point-virgule.

Maintenant, fournissez tous les privilèges à votre utilisateur de base de données sur la base de données que vous avez créée. Exécutez la commande suivante.

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

Remplacez StrongPassword par un mot de passe très fort et sécurisé.

La base de données sera automatiquement écrite par Postal, mais pour cela, nous devrons fournir les autorisations appropriées aux utilisateurs de Postal. Exécutez la commande suivante pour accorder des privilèges à tous les utilisateurs qui commencent par postal-.

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

Maintenant, exécutez la commande suivante pour appliquer immédiatement les changements sur les privilèges de la base de données.

FLUSH PRIVILEGES;

Quittez l’invite MySQL en utilisant la commande suivante.

EXIT;

Installer RabbitMQ

RabbitMQ est écrit en langage Erlang, dans ce tutoriel nous allons installer la dernière version d’Erlang sur le serveur. Installez Erlang en utilisant la commande suivante.

apt -y install erlang

Importez la clé GPG en exécutant :

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

Maintenant, ajoutez le dépôt RabbitMQ en exécutant la commande suivante :

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

Mettez à jour l’index du dépôt en exécutant la commande suivante.

apt update

Maintenant, vous pouvez installer RabbitMQ en exécutant la commande suivante.

apt -y install rabbitmq-server

RabbitMQ est maintenant installé sur votre système.

Configurer RabbitMQ

Vous pouvez démarrer le processus du serveur RabbitMQ en exécutant la commande suivante.

systemctl start rabbitmq-server

Pour démarrer automatiquement RabbitMQ au démarrage, exécutez la commande suivante.

systemctl enable rabbitmq-server

Maintenant, exécutez la commande suivante pour créer un hôte virtuel pour Postal dans le serveur RabbitMQ.

rabbitmqctl add_vhost /postal

Maintenant, ajoutez un utilisateur RabbitMQ pour Postal en exécutant la commande suivante.

rabbitmqctl add_user postal StrongPassword

Remplacez StrongPassword par un mot de passe très fort.

Maintenant, définissez les autorisations appropriées sur l’hôte virtuel RabbitMQ pour l’utilisateur RabbitMQ.

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

Installer Git et Node.js

Git sera utilisé pour récupérer le package d’installation et quelques dépendances. Exécutez la commande suivante pour installer Git sur votre système.

apt -y install git

Vous pouvez vérifier si Git est installé avec succès en vérifiant la version en utilisant la commande suivante.

git --version

Vous devriez obtenir la sortie suivante.

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

Node.js sera utilisé pour compiler la bibliothèque JavaScript. Installez le logiciel en utilisant la commande suivante.

apt -y install nodejs

Vous pouvez vérifier si Node.js est installé avec succès en exécutant la commande suivante.

nodejs -v

Vous devriez obtenir la sortie suivante.

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

Maintenant que nous avons toutes les dépendances prêtes, vous pouvez installer Postal.

Installer Postal

Postal doit fonctionner en tant qu’utilisateur isolé. Exécutez la commande suivante pour créer un nouvel utilisateur.

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

La commande ci-dessus créera un nouvel utilisateur avec le nom d’utilisateur postal et le répertoire personnel est défini sur /opt/postal.

Autorisez Ruby à écouter les ports privilégiés en exécutant la commande suivante.

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

Maintenant que tout est prêt, téléchargez l’archive Postal la plus récente et extrayez l’archive en tant qu’utilisateur Postal en utilisant la commande suivante.

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

Maintenant, créez un lien symbolique vers le fichier binaire Postal en exécutant la commande suivante.

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

Maintenant, vous pouvez interagir avec votre serveur Postal depuis n’importe quel répertoire. Pour exécuter les prochaines commandes, vous devrez vous connecter au shell en tant qu’utilisateur postal.

su - postal

Maintenant, vous devrez installer toutes les dépendances Ruby nécessaires pour exécuter l’application.

postal bundle /opt/postal/vendor/bundle

Une fois les dépendances installées, vous devrez générer les fichiers de configuration par défaut.

postal initialize-config

La commande ci-dessus générera la configuration requise pour votre installation de Postal, y compris diverses clés et certificats. Cela générera également le fichier de configuration postal.yml par défaut. Vous devriez obtenir la sortie suivante.

postal@ubuntu:~$ postal initialize-config
Créé le fichier de configuration exemple à /opt/postal/config/postal.yml
Créé une nouvelle clé privée pour Let's Encrypt
Créé une nouvelle clé de signature pour DKIM & requêtes HTTP
Créé une nouvelle clé privée pour les connexions TLS du serveur rapide par défaut
Créé un nouveau certificat auto-signé pour les connexions TLS du serveur rapide par défaut

Maintenant, vous devrez configurer quelques options dans le fichier postal.yml.

nano /opt/postal/config/postal.yml

Trouvez la ligne suivante :

web:
  # L'hôte sur lequel l'interface de gestion sera disponible
  host: postal.example.com

Changez le nom d’hôte par votre nom de domaine réel. Ensuite, trouvez les lignes suivantes.

main_db:
  # Spécifiez les détails de connexion pour votre base de données MySQL
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  database: postal

message_db:
  # Spécifiez les détails de connexion pour votre serveur MySQL qui hébergera les
  # bases de données de messages pour les serveurs de messagerie.
  host: 127.0.0.1
  username: postal
  password: p0stalpassw0rd
  prefix: postal

Changez le nom d’utilisateur, le mot de passe et le nom de la base de données en fonction de la base de données que vous avez créée. Ensuite, trouvez ces lignes :

rabbitmq:
  # Spécifiez les détails de connexion pour votre serveur RabbitMQ.
  host: 127.0.0.1
  username: postal
  password: StrongPassword
  vhost: /postal

Changez la configuration ci-dessus en fonction de l’hôte virtuel et de l’utilisateur créés pour RabbitMQ. Ensuite, trouvez les configurations DNS.

dns:
  # Spécifie l'enregistrement DNS que vous avez configuré. Consultez la documentation à
  # https://github.com/atech/postal/wiki/Domains-&-DNS-Configuration pour plus
  # d'informations à ce sujet.
  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

Changez les domaines ci-dessus avec les domaines réels que vous souhaitez utiliser avec le serveur de messagerie.

Enregistrez le fichier et quittez l’éditeur. Maintenant, initialisez la base de données et d’autres actifs en exécutant :

postal initialize

Créez l’utilisateur administrateur Postal en exécutant la commande suivante.

postal make-user

La commande ci-dessus vous demandera l’adresse e-mail, le nom d’utilisateur et le mot de passe. La commande ci-dessus générera la sortie suivante.

postal@ubuntu:~$ postal make-user
Créateur d'utilisateur Postal
Entrez les informations requises pour créer un nouvel utilisateur Postal.
Cet outil est généralement utilisé uniquement pour créer votre utilisateur admin initial.

Adresse e-mail      : [email protected]
Prénom              : Liptan
Nom de famille      : Biswas
Mot de passe initial : **************

L'utilisateur a été créé avec l'adresse e-mail [email protected]

La configuration en ligne de commande de Postal est maintenant terminée, vous pouvez démarrer le serveur en exécutant la commande suivante.

postal start

Pour vérifier si les services ont démarré correctement, exécutez la commande suivante.

postal status

Vous devriez obtenir la sortie suivante.

postal@ubuntu:~$ postal status
Version de Procodile   1.0.17
Racine de l'application    /opt/postal
PID du superviseur      5319
Démarré             2017-07-21 07:26:19 +0000

|| web
|| Quantité            1
|| Commande             bundle exec puma -C config/puma.rb
|| Respawn            5 toutes les 3600 secondes
|| Mode de redémarrage        usr1
|| Chemin du journal            aucun spécifié
|| Adresse/Port        aucun
|| => web.1            En cours d'exécution      07:26        pid:5325     respawns:0      port:-        tag:-

|| worker
|| Quantité            1
|| Commande             bundle exec ruby script/worker.rb
|| Respawn            5 toutes les 3600 secondes
|| Mode de redémarrage        start-term
|| Chemin du journal            aucun spécifié
|| Adresse/Port        aucun
|| => worker.1         En cours d'exécution      07:26        pid:5327     respawns:0      port:-        tag:-

|| cron
|| Quantité            1
|| Commande             bundle exec rake postal:cron
|| Respawn            5 toutes les 3600 secondes
|| Mode de redémarrage        term-start
|| Chemin du journal            aucun spécifié
|| Adresse/Port        aucun
|| => cron.1           En cours d'exécution      07:26        pid:5329     respawns:0      port:-        tag:-

|| smtp
|| Quantité            1
|| Commande             bundle exec rake postal:smtp_server
|| Respawn            5 toutes les 3600 secondes
|| Mode de redémarrage        usr1
|| Chemin du journal            aucun spécifié
|| Adresse/Port        aucun
|| => smtp.1           En cours d'exécution      07:26        pid:5332     respawns:0      port:-        tag:-

|| requeuer
|| Quantité            1
|| Commande             bundle exec rake postal:requeuer
|| Respawn            5 toutes les 3600 secondes
|| Mode de redémarrage        term-start
|| Chemin du journal            aucun spécifié
|| Adresse/Port        aucun
|| => requeuer.1       En cours d'exécution      07:26        pid:5334     respawns:0      port:-        tag:-

Pour arrêter Postal, vous pouvez toujours exécuter la commande suivante.

postal stop

Configurer Nginx en tant que proxy inverse

Pour des raisons de sécurité, l’interface web et l’API de Postal doivent être derrière un serveur web de production tel qu’Apache ou Nginx. Dans ce tutoriel, nous allons installer et configurer Nginx en tant que proxy inverse.

Installez le serveur web Nginx en exécutant la commande suivante.

apt -y install nginx

Il est recommandé d’utiliser SSL pour accéder à Nginx. Vous pouvez soit utiliser un certificat auto-signé, soit un certificat SSL gratuit de Let’s Encrypt ou un certificat commercial. Dans ce tutoriel, nous allons utiliser le SSL gratuit de Let’s Encrypt.

Installez le client Let’s Encrypt également connu sous le nom de certbot en exécutant la commande suivante.

apt -y install certbot

Une fois l’installation terminée, exécutez la commande suivante pour obtenir des certificats de l’autorité de certification Let’s Encrypt. Assurez-vous que le nom de domaine est pointé vers votre serveur car certbot vérifiera l’autorité du domaine avant de fournir les certificats. Remplacez mail.example.com par votre nom de domaine réel.

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

Une fois les certificats générés, ils seront stockés dans le répertoire /etc/letsencrypt/live/mail.example.com.

Le SSL de Let’s Encrypt expire dans 90 jours, il est donc recommandé de définir un renouvellement automatique pour vos certificats. Exécutez la commande suivante pour ouvrir votre fichier crontab.

crontab -e

Entrez la ligne suivante dans le fichier crontab.

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

Le cron job ci-dessus s’exécutera automatiquement tous les lundis à 1h30 et si vos certificats sont dus pour expiration, il les renouvellera automatiquement.

Maintenant, créez un nouveau bloc de serveur pour votre site web en exécutant la commande suivante.

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

Remplissez le fichier avec le contenu suivant.

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

Enregistrez le fichier et quittez l’éditeur. Maintenant, redémarrez le serveur web nginx en exécutant.

systemctl restart nginx

Pour activer nginx pour qu’il démarre automatiquement au démarrage, exécutez la commande suivante.

systemctl enable nginx

Vous pouvez maintenant accéder à Postal en naviguant sur le site suivant via votre navigateur web préféré.

https://mail.example.com

Configurer Postal

Une fois que vous naviguez sur le site ci-dessus, vous verrez l’interface suivante.

Connexion Postal

Entrez l’adresse e-mail et le mot de passe de l’utilisateur que vous avez créé précédemment. Une fois connecté, vous serez invité à créer une nouvelle organisation.

Ajouter une organisation dans Postal

Fournissez le nom de l’organisation. Vous pouvez choisir d’utiliser le nom court généré automatiquement, ou vous pouvez en spécifier un vous-même. Les noms courts sont utilisés comme nom d’utilisateur lors de l’authentification avec le serveur SMTP. Il ne doit contenir que des lettres, des chiffres et des tirets.

Entrer le nom de l'organisation

Une fois l’organisation créée, vous serez invité à créer un nouveau serveur de messagerie.

Ajouter un serveur de messagerie

Fournissez le nom, le nom court et le mode du serveur de messagerie. En mode Live, tous les e-mails sont routés et livrés normalement, mais en mode développement, ils ne sont visibles que dans l’interface web.

Construire un nouveau serveur de messagerie

Une fois que vous avez ajouté le serveur de messagerie, vous devrez ajouter un nouveau domaine dans le serveur de messagerie. Cliquez sur l’onglet Domaines et créez un nouveau nom de domaine.

Ajouter un domaine

Une fois que vous avez ajouté le nom de domaine, vous devrez configurer le DNS pour le domaine. Vous devrez ajouter deux enregistrements TXT pour SPF et DKIM. Vous devrez également ajouter un enregistrement CNAME et un enregistrement MX pour le chemin de retour et la livraison des e-mails. Une fois que vous avez configuré le DNS, cliquez sur le bouton Vérifiez que mes enregistrements sont corrects pour vérifier la configuration DNS.

Configurer l'enregistrement MX

Maintenant, vous devrez créer des identifiants SMTP pour l’envoi et la réception d’e-mails.

Détails SMTP

Choisissez le type comme SMTP ou API. Fournissez le nom pour les identifiants SMTP, choisissez comment vous souhaitez gérer l’adresse e-mail.

Une fois terminé, vous pouvez revenir à l’onglet Aperçu et vous verrez les informations nécessaires pour envoyer ou recevoir l’adresse e-mail.

Envoi d'e-mail avec Postal

Conclusion

Dans ce tutoriel, nous avons réussi à configurer un serveur de messagerie complet en utilisant Postal sur Ubuntu 17.04. Vous pouvez utiliser le serveur de messagerie pour envoyer et recevoir les e-mails de votre organisation.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.