# Procédure SPF / DKIM / DMARC — re-info.fr

Objectif : sortir les emails du formulaire de contact du dossier Spam des
boîtes externes (Gmail, Hotmail…). Deux chemins d'envoi existent, d'où deux
configurations DNS à prévoir.

---

## 1. Contexte : les deux chemins d'envoi

| Chemin | Origine | IP | SPF actuel | Envoi SMTP |
|---|---|---|---|---|
| 1. Mutualisé (PHPMailer direct) | hébergement Web OVH | 5.135.23.164 (A de re-info.fr) | couvert par `a` + `include:mx.ovh.com` | ssl0.ovh.net:465 |
| 2. Relais VPS (smtp-relay.py) | VPS OVH 213.32.89.155 | 213.32.89.155 | **NON couvert** | ssl0.ovh.net:465 |

État actuel (relevé le 15/08/2026) :
- SPF : `v=spf1 include:mx.ovh.com mx a ~all` → l'IP du VPS manque
- DKIM : **aucun enregistrement**
- DMARC : `v=DMARC1; p=none; rua=mailto:contact@re-info.fr` → p=none (ne fait rien)

Cause probable du spam : pas de DKIM + SPF softfail (~all) pour les envois
via le VPS → Gmail/Hotmail n'ont aucun signal de confiance.

---

## 2. SPF — valeur exacte à coller

Dans la zone DNS OVH du domaine re-info.fr : enregistrement TXT, nom `@` :

```
v=spf1 include:mx.ovh.com mx a ip4:5.135.23.164 ip4:213.32.89.155 ~all
```

Explication des mécanismes :
- `include:mx.ovh.com` : autorise les serveurs d'envoi OVH (mutualisé + smtps)
- `mx` : autorise les MX du domaine (mx0..mx3.mail.ovh.net)
- `a` : autorise l'A du domaine (5.135.23.164) — IP du mutualisé
- `ip4:213.32.89.155` : **la nouvelle ligne** — IP du VPS (relais)
- `~all` : softfail (accepte mais marque). Ne passer à `-all` (rejet strict)
  qu'après quelques jours sans problème.

---

## 3. DKIM

### 3.1 Chemin 1 (mutualisé) — géré par OVH

OVH Manager → Web Cloud → E-mails → domaine re-info.fr → onglet **DKIM** :
clic sur « Générer » / activer. OVH publie lui-même l'enregistrement dans la
zone (selecteur type `ovh1._domainkey.re-info.fr`). Vérifier ensuite :

```
dig +short TXT ovh1._domainkey.re-info.fr
```

### 3.2 Chemin 2 (VPS relay) — clé auto-générée

Générer une paire de clés sur le VPS :

```
openssl genrsa -out /home/alan/SITE/CRON/dkim-private.pem 2048
openssl rsa -in /home/alan/SITE/CRON/dkim-private.pem -pubout -out dkim-public.pem
```

Récupérer la clé publique (une seule ligne, sans les lignes `-----BEGIN/END` ni
les retours à la ligne) :

```
grep -v "PUBLIC KEY" dkim-public.pem | tr -d '\n'
```

Publier dans la zone DNS OVH — enregistrement TXT, nom `vps1._domainkey` :

```
v=DKIM1; k=rsa; p=<clé publique récupérée ci-dessus>
```

Changer le selecteur `vps1` au besoin ; noter-le pour la config côté relais.

**Modification à appliquer plus tard** (pas encore faite) : faire signer les
emails par le relais avec la clé privée. Deux options :
- Python : `pip install dkimpy`, puis dans `smtp-relay.py`, avant l'envoi curl,
  signer le contenu avec le selecteur `vps1` et le domaine re-info.fr ;
- Ou `openssl dgst -sha256 -sign dkim-private.pem` sur les en-têtes
  (plus délicat, dkimpy recommandé).

Tant que le relais ne signe pas, la valeur DKIM vps1 est inutile : ne publier
l'enregistrement que le jour où la signature est implémentée.

---

## 4. DMARC

Valeur actuelle (p=none = ne filtre rien, juste des rapports) :

```
v=DMARC1; p=none; rua=mailto:contact@re-info.fr
```

Après 3 à 7 jours sans problème (SPF + DKIM en place, spam réglé), durcir en :

```
v=DMARC1; p=quarantine; rua=mailto:contact@re-info.fr; adkim=s; aspf=s
```

- `p=quarantine` : les emails qui échouent SPF+DKIM passent en spam au lieu
  d'être rejetés (`p=reject` à éviter, trop risqué)
- `adkim=s` / `aspf=s` : mode strict (alignement exact du domaine)
- `rua` : rapports agrégés reçus sur contact@re-info.fr

---

## 5. Vérification et tests

Après chaque modification DNS (compter 5 min à 24 h de propagation OVH) :

```
dig +short TXT re-info.fr
dig +short TXT vps1._domainkey.re-info.fr
dig +short TXT _dmarc.re-info.fr
dig +short MX re-info.fr
```

Test réel de délivrabilité :
1. Envoyer le formulaire de contact complet (code → vérification → message).
2. Envoyer aussi un test direct du relais vers une boîte externe :
   ```
   curl -s -X POST http://127.0.0.1:8443/ -H "Content-Type: application/json" \
     -d '{"token":"<token>","to":"<boite-gmail>","subject":"test","message":"test"}'
   ```
3. Vérifier la boîte externe : réception dans Boîte de réception, pas de Spam.
4. Vérifier la note sur https://www.mail-tester.com (viser 10/10).

---

## 6. Rappels / pièges

- La zone DNS de re-info.fr se modifie dans l'espace client OVH, pas sur le
  VPS (aucun accès DNS local).
- Un seul enregistrement SPF TXT par domaine : ne pas ajouter un 2e SPF, il
  faut **remplacer** la valeur existante.
- Max 10 requêtes DNS dans SPF : la valeur proposée n'en utilise que 3.
- La boîte admin formulaire@re-info.fr reçoit déjà tout (boîte OVH, livraison
  interne) : c'est normal que seul l'extérieur soit touché.
- Ne pas passer à `-all` / `p=reject` tant que le DKIM du relais ne signe pas.
