Publié le : 11/08/2025
Vérifier et Diagnostiquer la Connexion à un Serveur IMAP – Guide Complet

Besoin d’un diagnostic messagerie clair et rapide ? Ce guide pas-à-pas vérifie la chaîne TLS de bout en bout — DNS, certificats acme.sh, déploiement HestiaCP — et teste IMAP/SMTP avec des commandes
opensslsimples. À la clé : contrôle des ports 143/993/587/465 et correctifs concrets pour Dovecot/Exim4.
1. Objectif & Contexte
Ce guide explique comment tester la connectivité et l’authentification à un serveur IMAP (ex. Dovecot, Cyrus, Courier) sur les ports standards (143 pour IMAP clair + STARTTLS, 993 pour IMAPS). Il couvre les outils en ligne de commande, l’analyse des réponses, la vérification SSL/TLS et la résolution des erreurs communes.
2. Rappels IMAP & Ports
| Port | Protocole | Usage | Chiffrement |
|---|---|---|---|
| 143 | IMAP | Lecture mail standard | STARTTLS optionnel (upgrade) |
| 993 | IMAPS | IMAP sur TLS direct | TLS implicite dès la connexion |
Remarque : IMAP ne gère que la réception/consultation. L’envoi passe par SMTP (ports 587/465). Mais une défaillance IMAP peut impacter le webmail ou les clients lourds.
3. Checklist Rapide de Diagnostic
| Étape | Action | Outils |
|---|---|---|
| 1 | Vérifier DNS & enregistrements MX, A | dig, host |
| 2 | Vérifier ouverture ports | ss, netstat, nmap |
| 3 | Test handshake TLS | openssl s_client |
| 4 | Lire CAPABILITY & authentifier | Dialogue IMAP manuel |
| 5 | Vérifier certificats (dates, CN/SAN) | openssl x509 |
| 6 | Consulter logs serveur | journalctl, fichiers logs |
| 7 | Vérifier bans (Fail2ban) | fail2ban-client |
| 8 | Test multi-outils (swaks, client mail) | swaks, Thunderbird |
4. Pré-requis DNS & Réseau
4.1 Résolution DNS
dig +short MX exemple.com
dig +short mail.exemple.com
Attendu : l’entrée MX pointe vers un hôte qui résout vers l’IP du serveur IMAP.
4.2 Latence & Accessibilité
ping -c 3 mail.exemple.com
(S’il est désactivé côté firewall → pas critique.)
4.3 Ports ouverts (externe)
nmap -Pn -p 143,993 mail.exemple.com
Résultat attendu : open sur les deux ports (si 993 activé).
5. Méthodes de Test (Basique → Avancé)
5.1 Vérifier la résolution & l’IP utilisée
host mail.exemple.com
Si plusieurs IP (IPv4 + IPv6), tester les deux (certains serveurs mal configurés en IPv6).
5.2 Test IMAPS (port 993) avec openssl
echo | openssl s_client -connect mail.exemple.com:993 -servername mail.exemple.com -showcerts
Points à lire dans la sortie :
Verify return code: 0 (ok)(sinon chaîne incomplète ou nom incorrect)- Le certificat présenté (CN/SAN) doit inclure
mail.exemple.com(ou wildcard*.exemple.com).
5.3 Test IMAP STARTTLS (port 143)
openssl s_client -connect mail.exemple.com:143 -starttls imap -servername mail.exemple.com -crlf
5.4 Dialogue IMAP manuel
Après connexion (port 993 ou STARTTLS sur 143), taper :
a1 CAPABILITY
a2 LOGIN [email protected] MOTDEPASSE
a3 LIST "" "*"
a4 SELECT INBOX
a5 LOGOUT
Réponses :
* CAPABILITY IMAP4 ...(présence deSTARTTLSseulement sur 143 avant négociation)a2 OK= authentification réussie.
5.5 Test automatisé avec swaks
swaksest un outil SMTP/IMAP flexible (selon build). À défaut, scriptexpect.
Exemple script IMAP simple (bash + openssl) :
#!/usr/bin/env bash
HOST="mail.exemple.com"
USER="[email protected]"
PASS="MOTDEPASSE" # (éviter de le laisser en clair en prod)
{
echo "a1 LOGIN $USER $PASS";
echo "a2 LIST \"\" \"INBOX\"";
echo "a3 LOGOUT";
} | openssl s_client -quiet -connect "$HOST:993" -servername "$HOST" 2>/dev/null
5.6 Test via curl (capability rapide)
Certaines builds permettent :
curl -k 'imaps://mail.exemple.com:993' --user '[email protected]:MotDePasse' -v
Observe le code de sortie (0 = succès).
5.7 Test depuis un client GUI
- Thunderbird : ajouter le compte → détecte automatiquement ports & chiffrement.
- Vérifier qu’il sélectionne IMAP (pas POP3), port 993 (SSL/TLS) ou 143 (STARTTLS).
6. Scripts d’Automatisation
6.1 Script de vérification quotidienne (ex. cron)
#!/usr/bin/env bash
HOST="mail.exemple.com"
USER="[email protected]"
PASS="__SECRET__"
LOG="/var/log/imap_check.log"
TS=$(date '+%Y-%m-%d %H:%M:%S')
RESULT=$( {
echo "a1 LOGIN $USER $PASS";
echo "a2 STATUS INBOX (MESSAGES)";
echo "a3 LOGOUT"; } | \
openssl s_client -connect "$HOST:993" -servername "$HOST" -quiet 2>/dev/null )
echo "[$TS]" >> "$LOG"
if echo "$RESULT" | grep -q "a1 OK"; then
echo "SUCCESS" >> "$LOG"
else
echo "FAIL" >> "$LOG"
echo "$RESULT" >> "$LOG"
fi
Ajouter dans cron (crontab -e) :
*/15 * * * * /usr/local/bin/check_imap.sh
6.2 Alerting simple (mail en cas d’échec)
Ajouter :
if ! echo "$RESULT" | grep -q "a1 OK"; then
mail -s "ALERTE IMAP" [email protected] <<< "Echec IMAP : $RESULT"
fi

7. Interprétation des Réponses IMAP
| Élément | Signification |
|---|---|
* OK [CAPABILITY ...] | Serveur prêt, liste des capacités |
NO Authentication failed. | Login incorrect / compte verrouillé |
BAD | Commande mal formée |
BYE | Déconnexion forcée (timeout, shutdown, ban) |
* LIST (...) | Liste de dossiers retournée |
* FLAGS (\Seen ...) | Informations sur la boîte sélectionnée |
8. Authentification & Formats d’Identifiant
Selon la configuration :
| Format requis | Exemple | Contexte |
|---|---|---|
| Adresse complète | [email protected] | Multi‑domaines (virtual users) |
| Username simple | user | Domaine unique / mapping local |
| Préfixe/suffixe transformé | user%exemple.com | Transport spécifique legacy |
Cas d’erreur : le serveur accepte le login mais ne trouve pas la boîte → mauvais répertoire maildir, permissions, ou user non provisionné.
9. Vérification des Certificats SSL/TLS
9.1 Détails certificat
openssl s_client -connect mail.exemple.com:993 -servername mail.exemple.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates -ext subjectAltName
Vérifier :
notBefore / notAfter(validité)subjectAltNamecontient le FQDN- Issuer : AC reconnue (Let’s Encrypt, Sectigo…).
9.2 Chaîne complète
Absence d’intermédiaire → certains clients échouent : vérifier fullchain.pem utilisé.
9.3 Renouvellement & Reload
Après renouvellement (ex. acme.sh) :
systemctl reload dovecot
systemctl reload exim4 # si utilisé pour SMTP auth
10. Logs Serveur & Où Chercher
| Service | Fichier / Commande |
|---|---|
| Dovecot | /var/log/dovecot.log ou journalctl -u dovecot -n 50 |
| Cyrus | /var/log/maillog (selon distro) |
| Courier | /var/log/mail.log |
| Auth (PAM / passdb) | Même logs Dovecot (mots-clés auth:) |
| Fail2ban | /var/log/fail2ban.log |
| TLS errors | Dovecot log + openssl côté client |
| Webmail (Roundcube) | /var/log/roundcube/errors |
Exemple d’entrée Dovecot :
Jul 19 10:02:31 mail dovecot: imap-login: Login: user=<[email protected]>, method=PLAIN, rip=198.51.100.25, lip=203.0.113.10, mpid=12345, TLS, session=<AbCdEfGhIj==>
11. Erreurs Fréquentes & Résolutions
| Erreur / Symptôme | Cause Probable | Solution |
|---|---|---|
| Timeout / Pas de réponse | Port filtré (firewall, NAT) | Ouvrir ports 143/993 (iptables / security group) |
Connection closed by foreign host | Crash ou restart Dovecot | Vérifier logs, RAM, mises à jour |
NO Authentication failed. | Mauvais mot de passe / format user | Vérifier login complet, reset mot de passe |
BYE Internal error | Permission dossiers mail / corruption index | Réparer droits, supprimer fichiers index (*.imap) |
| Certificat CN mismatch | Mauvais host utilisé par client | Utiliser FQDN correct / regénérer cert incluant host |
Verify return code: 10/20 | Chaîne incomplète / self-signed | Utiliser fullchain, installer CA, cert public |
Invalid login delay / ban | Fail2ban ou rate limiting | Déban IP, corriger script de test |
| Dossiers vides / absents | Maildir non créé | Envoyer / recevoir un mail initial, doveadm mailbox create -u user INBOX |
| Lenteur listing | Indices corrompus | doveadm index -u user INBOX ou supprimer index |
| STARTTLS non proposé | Config TLS désactivée sur 143 | Activer !SSLv2 !SSLv3 + ssl = yes (Dovecot) |
12. Sécurité & Bonnes Pratiques
- Imposer TLS : refuser authentification en clair (
disable_plaintext_auth = yesen TLS-only). - Protocols : limiter à
TLSv1.2etTLSv1.3. - Ciphers : config forte (Mozilla SSL Config Generator).
- Fail2ban : protéger contre brute-force (jail dovecot / exim / postfix).
- Logs rotation : surveiller croissance (
logrotate). - Monitoring : script cron + alerting (Email, Slack, Telegram).
- Certificates : renouvellement automatique + test hebdo.
13. Checklist Finale avant Mise en Prod
| Item | OK ? |
|---|---|
| DNS MX correct & résout | ☑ |
| Ports 143 & 993 ouverts | ☑ |
| Certificat valide (dates, SAN) | ☑ |
| Auth IMAP réussie via openssl | ☑ |
| LIST / SELECT INBOX fonctionne | ☑ |
| Logs propres (pas d’erreurs récurrentes) | ☑ |
| Pas de bans anormaux Fail2ban | ☑ |
| Monitoring script en place | ☑ |
| Politique TLS durcie | ☑ |
14. FAQ
Q : Puis-je désactiver complètement le port 143 ?
R : Oui si tous les clients supportent 993 (IMAPS). Laisse 143 si tu veux STARTTLS ou compatibilité legacy.
Q : Comment tester rapidement sans openssl ?
R : curl imaps://mail.exemple.com:993 (avec credentials) ou un client mail portable.
Q : Le certificat wildcard couvre-t-il aussi IMAP ?
R : Oui, si le FQDN utilisé (mail.exemple.com) est inclus par le wildcard *.exemple.com.
Q : Pourquoi CAPABILITY ne montre pas IDLE ?
R : Option compilée/désactivée. Vérifier modules Dovecot / config plugin.
Q : Dois-je regénérer les index Dovecot régulièrement ?
R : Non sauf corruption ou lenteur inhabituelle.
Q : Est-ce que les commandes qui sont utilisés ici peuvent être utilisé avec le protocole SMTP ?
R : Oui — utilise openssl s_client -connect mail.exemple.com:587 -starttls smtp -servername mail.exemple.com (ou -connect mail.exemple.com:465 sans -starttls pour SMTPS) ; pour un pas-à-pas clair (acme.sh → HestiaCP → Exim4 + tests openssl), suis ce guide : https://smart-tech.mg/de-lemission-acme-au-smtp-chiffre-guide-complet-acme-sh-hestiacp-exim4-tls/
15. Résumé Express
- Vérifie DNS & ports ouverts.
- Handshake TLS :
openssl s_client(993 ou 143 + STARTTLS). - Envoie
CAPABILITYpuisLOGINpour tester l’auth. - Contrôle certificat (SAN, dates, CA, chaîne complète).
- Inspecte logs Dovecot + Fail2ban pour les échecs.
- Automatisation : script de vérification périodique.
- Applique durcissement TLS + monitoring continu.


















