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 upgradeshutdown -r nowUne 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 409B6B1796C275462A1703113804BB82D39DC0E3Maintenant, installez RVM en utilisant la commande suivante.
curl -sSL https://get.rvm.io | bash -s stablePour utiliser RVM immédiatement, vous devrez exécuter la commande suivante.
source /etc/profile.d/rvm.shMaintenant, récupérez la liste des Ruby en utilisant la commande suivante.
rvm list knownVous 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.4Utilisez la version de Ruby en utilisant la commande suivante.
rvm use 2.4Vous pouvez vérifier la version de Ruby en utilisant la commande suivante.
ruby -vVous 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 bundlergem install procodileInstaller 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-devExécutez les commandes suivantes pour démarrer MariaDB et l’activer pour qu’il démarre au démarrage.
systemctl start mariadbsystemctl enable mariadbMaintenant, exécutez les commandes suivantes pour sécuriser votre installation de MariaDB.
mysql_secure_installationLa 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 -pLa 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 erlangImportez 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 updateMaintenant, vous pouvez installer RabbitMQ en exécutant la commande suivante.
apt -y install rabbitmq-serverRabbitMQ 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-serverPour démarrer automatiquement RabbitMQ au démarrage, exécutez la commande suivante.
systemctl enable rabbitmq-serverMaintenant, exécutez la commande suivante pour créer un hôte virtuel pour Postal dans le serveur RabbitMQ.
rabbitmqctl add_vhost /postalMaintenant, ajoutez un utilisateur RabbitMQ pour Postal en exécutant la commande suivante.
rabbitmqctl add_user postal StrongPasswordRemplacez 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 gitVous pouvez vérifier si Git est installé avec succès en vérifiant la version en utilisant la commande suivante.
git --versionVous 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 nodejsVous pouvez vérifier si Node.js est installé avec succès en exécutant la commande suivante.
nodejs -vVous 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 postalLa 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/rubyMaintenant 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/postalMaintenant, créez un lien symbolique vers le fichier binaire Postal en exécutant la commande suivante.
ln -s /opt/postal/bin/postal /usr/bin/postalMaintenant, 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 - postalMaintenant, vous devrez installer toutes les dépendances Ruby nécessaires pour exécuter l’application.
postal bundle /opt/postal/vendor/bundleUne fois les dépendances installées, vous devrez générer les fichiers de configuration par défaut.
postal initialize-configLa 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.ymlTrouvez 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 initializeCréez l’utilisateur administrateur Postal en exécutant la commande suivante.
postal make-userLa 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 startPour vérifier si les services ont démarré correctement, exécutez la commande suivante.
postal statusVous 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 stopConfigurer 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 nginxIl 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 certbotUne 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.comUne 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 -eEntrez la ligne suivante dans le fichier crontab.
30 1 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.logLe 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.confRemplissez 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 nginxPour activer nginx pour qu’il démarre automatiquement au démarrage, exécutez la commande suivante.
systemctl enable nginxVous pouvez maintenant accéder à Postal en naviguant sur le site suivant via votre navigateur web préféré.
https://mail.example.comConfigurer Postal
Une fois que vous naviguez sur le site ci-dessus, vous verrez l’interface suivante.

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.

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.

Une fois l’organisation créée, vous serez invité à créer un nouveau 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.

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.

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.

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

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.

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.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.