# 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 : 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** (), 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.` : 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' {{DOMAINE}} {{DOMAINE}} mail.{{DOMAINE}} 993 SSL %EMAILADDRESS% password-cleartext mail.{{DOMAINE}} 465 SSL %EMAILADDRESS% password-cleartext 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.