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

158 lines
6.4 KiB
Markdown

# 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 :
```bash
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}}`.
```bash
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
```bash
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 :
```bash
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à.
```bash
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 :
```bash
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é.
```bash
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` :
```text
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` :
```text
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.
```bash
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.