Files
vps-docs/hestiacp/chapitres/09-messagerie.md
Zana 2e18724685 Ajout du guide PDF HestiaCP réutilisable (HestiaCP 1.10.4)
- 14 chapitres + annexe en Markdown (chapitres/), 99 étapes
- Générateur WeasyPrint (build/build.py) : PDF générique ou
  personnalisé via --vars fichier.conf
- PDF générique + PDF personnalisé srv1.skglobalinstitute.com
- Commandes v-* vérifiées contre le code source HestiaCP 1.10.4
- 03-bis-hestiacp.md pointe vers le nouveau guide

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018J2PsVQ28oW4xEkWJpcU9G
2026-09-10 20:01:59 +02:00

6.4 KiB

Messagerie

La messagerie repose sur Exim (envoi et réception), Dovecot (IMAP/POP3), SpamAssassin et ClamAV (antispam et antivirus), et Roundcube (webmail). HestiaCP signe les mails avec DKIM. Les enregistrements SPF et DMARC viennent déjà du modèle DNS.

[!WARNING] Prérequis

  • La zone DNS du domaine existe (chapitre 6). Sinon la clé DKIM ne sera pas publiée.
  • Le PTR de {{IP}} vaut {{FQDN}} (chapitre 1).

Créer le domaine de messagerie

Antispam, antivirus et DKIM (2048 bits) sont activés par défaut :

sudo v-add-mail-domain {{CLIENT}} {{DOMAINE}}
sudo v-list-dns-records {{CLIENT}} {{DOMAINE}} | grep -E "_domainkey|_dmarc|spf"

[!CHECK] Trois enregistrements TXT apparaissent :

  • mail._domainkey : v=DKIM1; k=rsa; p=… ;
  • _dmarc : v=DMARC1; p=quarantine; pct=100 ;
  • @ : v=spf1 a mx ip4:{{IP}} -all.

Activer le certificat SSL de la messagerie

Ce certificat couvre mail.{{DOMAINE}} et webmail.{{DOMAINE}}. Exim et Dovecot le présentent automatiquement aux clients mail qui se connectent à mail.{{DOMAINE}}.

sudo v-add-letsencrypt-domain {{CLIENT}} {{DOMAINE}} '' yes

[!CHECK] https://webmail.{{DOMAINE}} affiche la page de connexion Roundcube avec un cadenas valide.

Créer les boîtes mail

 sudo v-add-mail-account {{CLIENT}} {{DOMAINE}} contact 'MOT_DE_PASSE_MAIL'
 sudo v-add-mail-account {{CLIENT}} {{DOMAINE}} noreply 'MOT_DE_PASSE_NOREPLY'
sudo v-list-mail-accounts {{CLIENT}} {{DOMAINE}}

Ajouter un alias ou une redirection :

sudo v-add-mail-account-alias {{CLIENT}} {{DOMAINE}} contact info
sudo v-add-mail-account-forward {{CLIENT}} {{DOMAINE}} contact adresse@externe.com

Ajouter les enregistrements SRV (domaine principal)

Les enregistrements SRV aident les logiciels de messagerie à se configurer seuls. Le modèle child-ns du domaine principal n'en contient pas ; les autres domaines, créés avec le modèle default, les ont déjà.

sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} _imaps._tcp SRV '0 993 mail.{{DOMAINE}}.' 1
sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} _submission._tcp SRV '0 587 mail.{{DOMAINE}}.' 1
sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} _submissions._tcp SRV '0 465 mail.{{DOMAINE}}.' 1

Configurer un logiciel de messagerie

Réglage Valeur
Identifiant adresse complète, ex. contact@{{DOMAINE}}
Serveur entrant (IMAP) mail.{{DOMAINE}}, port 993, SSL/TLS
Serveur sortant (SMTP) mail.{{DOMAINE}}, port 465 SSL/TLS (ou 587 STARTTLS)
Authentification mot de passe normal
Webmail https://webmail.{{DOMAINE}}

Tester l'envoi et la réception

Vérifiez d'abord que le port 25 sortant n'est pas bloqué par l'hébergeur :

nc -vz -w 5 aspmx.l.google.com 25

[!CHECK] Connection to aspmx.l.google.com 25 port [tcp/smtp] succeeded!

Envoyez ensuite un mail depuis le webmail :

  1. vers l'adresse fournie par https://www.mail-tester.com : visez 10/10 ;
  2. vers une adresse Gmail : dans Afficher l'original, SPF, DKIM et DMARC doivent être PASS.

Répondez aussi depuis Gmail pour tester la réception.

Utiliser Spamhaus avec une clé gratuite (recommandé)

Spamhaus bloque les requêtes qui passent par les résolveurs DNS publics, ce qui rend son filtre antispam inopérant et peut fausser les résultats. La documentation HestiaCP recommande un compte gratuit Spamhaus DQS (https://www.spamhaus.com/free-trial/sign-up-for-a-free-data-query-service-account/), qui fournit une clé.

sudo v-list-sys-mail-dnsbl
sudo v-delete-sys-mail-dnsbl zen.spamhaus.org
sudo v-add-sys-mail-dnsbl VOTRE_CLE.zen.dq.spamhaus.net

Envoyer des mails depuis une application (Symfony…)

Méthode recommandée : envoi authentifié avec une vraie boîte, par exemple noreply. Le certificat correspond au nom utilisé, et les limites d'envoi par compte s'appliquent. Dans .env.local :

MAILER_DSN=smtp://noreply%40{{DOMAINE}}:MOT_DE_PASSE_NOREPLY@mail.{{DOMAINE}}:587

Note

Dans le DSN, @ s'écrit %40. Tout caractère spécial du mot de passe doit aussi être encodé : %23 pour #, %2F pour /, %3A pour :.

Alternative sans mot de passe : Exim accepte les mails envoyés depuis 127.0.0.1 sans authentification. Désactivez le TLS automatique, car le certificat ne correspond pas à 127.0.0.1 :

MAILER_DSN=smtp://127.0.0.1:25?auto_tls=false

Warning

N'utilisez pas sendmail:// : les fonctions PHP qu'il utilise (proc_open…) sont désactivées dans PHP-FPM par HestiaCP. N'utilisez pas localhost non plus : Exim n'écoute qu'en IPv4, alors que localhost peut se résoudre en IPv6 (::1).

[!TIP] Limite d'envoi Par défaut, chaque compte peut envoyer 200 mails par heure. Pour une application qui envoie beaucoup : sudo v-change-mail-account-rate-limit {{CLIENT}} {{DOMAINE}} noreply 1000.

Configuration automatique pour Thunderbird (facultatif)

HestiaCP ne gère pas l'autoconfiguration. Thunderbird la cherche sur autoconfig.<domaine> : un petit site statique suffit.

sudo v-add-dns-record {{CLIENT}} {{DOMAINE}} autoconfig A {{IP}}
sudo v-add-web-domain {{CLIENT}} autoconfig.{{DOMAINE}}
sudo v-add-letsencrypt-domain {{CLIENT}} autoconfig.{{DOMAINE}}
sudo mkdir -p /home/{{CLIENT}}/web/autoconfig.{{DOMAINE}}/public_html/mail
sudo tee /home/{{CLIENT}}/web/autoconfig.{{DOMAINE}}/public_html/mail/config-v1.1.xml > /dev/null << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<clientConfig version="1.1">
  <emailProvider id="{{DOMAINE}}">
    <domain>{{DOMAINE}}</domain>
    <displayName>{{DOMAINE}}</displayName>
    <incomingServer type="imap">
      <hostname>mail.{{DOMAINE}}</hostname>
      <port>993</port>
      <socketType>SSL</socketType>
      <username>%EMAILADDRESS%</username>
      <authentication>password-cleartext</authentication>
    </incomingServer>
    <outgoingServer type="smtp">
      <hostname>mail.{{DOMAINE}}</hostname>
      <port>465</port>
      <socketType>SSL</socketType>
      <username>%EMAILADDRESS%</username>
      <authentication>password-cleartext</authentication>
    </outgoingServer>
  </emailProvider>
</clientConfig>
EOF
sudo chown -R {{CLIENT}}:{{CLIENT}} /home/{{CLIENT}}/web/autoconfig.{{DOMAINE}}/public_html/mail

[!CHECK] curl -s https://autoconfig.{{DOMAINE}}/mail/config-v1.1.xml | head -3 affiche le début du fichier XML.