Les commandes de POP3

Commande Fonction
USER Il s'agit de l'identifiant du titulaire du compte. En règle générale la partie à gauche du @ dans l'adresse électronique.
PASS Le mot de passe fourni par le FAI
STAT Donne le nombre de messages présents dans la file d'attente, ainsi que le volume total des messages en octets.
LIST Donne la liste des messages en attente, avec pour chaque message: * Son numéro d'ordre dans la file * Sa taille en octets
UIDL Analogue à LIST, mis à part qu'elle retourne non pas la taille du message mais un identificateur unique
RETR n Permet de récupérer la totalité du message “n” dans la file d'attente.
DELE n Détruit le message “n” dans la file d'attente. le numéro d'ordre des messages suivants demeure inchangé jusqu'à la fin de la session.
TOP n x Permet de récupérer les x premières lignes du  message “n”. Les ligne d'en-tête ne sont pas comptabilisées. Cette commande est le plus souvent utilisée pour récupérer l'en-tête complet et la première ligne du message, x ne pouvant être égal à 0.
LAST Permet de connaitre le numéro d'ordre du dernier message auquel on a accédé. (Utile avec une session TELNET).
RSET Cette commande permet d'annuler toutes les commandes de destruction de messages envoyées pendant la session. En fait, les commandes DELE ne sont rendues effectives que si la session a proprement été fermée (commande QUIT acceptée). Cette méthode permet donc d'annuler les opérations d'effacement dans la session en cours.
NOOP Cette commande sert à ne rien faire.
QUIT Clôture la session en cours. Le serveur ferme alors la session TCP et “fait le ménage” dans la file d'attente, en fonction des ordres DELE qui ont été donnés.

Pour plus de détails sur les commandes POP3, consultez la rfc1939

Il y a très peu de commandes, mais elles sont suffisantes pour relever sa boite aux lettres. La plupart des MUA (cliants de messagerie) ne les utilisent même pas toutes.

Expérience avec TELNET

Il est donc tout à fait possible, si l'on connaît le jeu de commandes ci-dessus, d'ausculter sa boite aux lettres avec un terminal TELNET. Voici des extraits d'une trace enregistrée avec un terminal TELNET, connecté sur le port 110 du serveur pop installé sur notre passerelle :

~# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user chris
+OK
pass epikoi
+OK Logged in.

Nous avons utilisé les commandes user et pass pour nous identifier, le serveur nous a reconnu et accepte la connexion.

stat
+OK 3 6694
list
+OK 3 messages:
1 4997
2 1217
3 480
.

Nous avons utilisé la commande stat, ce qui nous apprend qu'il y a 3 messages (rappelez-vous, le premier n'est pas un vrai message), puis la commande list qui ne fait que nous donner les numéros d'ordre et la taille en octets de chaque message.

top 1 1
+OK
Return-Path: <logcheck@lair.nain-t.net>
X-Original-To: root
Delivered-To: root@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 110)
	id 0278628B8; Sat, 19 Jul 2008 06:02:34 +0200 (CEST)
To: root@lair.nain-t.net
Subject: betelgeuse.maison.mrs 2008-07-19 06:02 System Events
Message-Id: <20080719040235.0278628B8@lair.nain-t.net>
Date: Sat, 19 Jul 2008 06:02:34 +0200 (CEST)
From: logcheck@lair.nain-t.net (logcheck system account)

This email is sent by logcheck. If you wish to no-longer receive it,
.
top 2 1
+OK
Return-Path: <prof@nain-t.net>
X-Original-To: root
Delivered-To: root@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
	id CCD3D10169; Sat, 19 Jul 2008 13:54:05 +0200 (CEST)
To: root@lair.nain-t.net
Subject: [Fail2Ban] ssh: banned 82.17.104.168
Message-Id: <20080719115406.CCD3D10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 13:54:05 +0200 (CEST)
From: prof@nain-t.net (root)

Hi,
.
top 3 1
+OK
Return-Path: <prof@nain-t.net>
X-Original-To: chris
Delivered-To: chris@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
	id D908F10169; Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
To: chris@lair.nain-t.net
Subject: Message test
Message-Id: <20080719132933.D908F10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
From: prof@nain-t.net (root)

Juste pour montrer comment les messages sont rangés
.
Nous utilisons trois fois la commande top en ne demandant qu'une seule ligne du message, et récupérons ainsi les en-têtes de chacun des trois messages.

dele 3
+OK Marked to be deleted.
list
+OK 2 messages:
1 4997
2 1217
.

Nous avons utilisé la commande dele pour supprimer le 3eme message, puis la commande list qui n'indique plus que les deux premiers messages.

rset
+OK
list
+OK 3 messages:
1 4997
2 1217
3 480
.

Nous nous ravisons et utilisons la commande rset pour annuler toutes les commandes d'effacement que nous aurions pu envoyer précédemment. La commande list ré affiche 3 messages.

retr 3
+OK 480 octets
Return-Path: <prof@nain-t.net>
X-Original-To: chris
Delivered-To: chris@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
	id D908F10169; Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
To: chris@lair.nain-t.net
Subject: Message test
Message-Id: <20080719132933.D908F10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
From: prof@nain-t.net (root)

Juste pour montrer comment les messages sont rangés
dans la file d'attente de type "mbox"
.
quit
+OK Logging out.
Connection closed by foreign host.
La commande retr permet ici d'afficher la totalité du 3eme message et la commande quit met fin à la session.

Notez que lorsque POP3 renvoie des données, par exemple avec la commande list, la dernière ligne envoyée est toujours une ligne commençant par un point .. C'est la convention du protocole pour indiquer au client que le serveur a fini d'envoyer des données et que le client peut passer à la commande suivante.

Que retrouverions-nous sur le serveur, si nous ouvrons une nouvelle connexion ?

:~# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user chris
+OK
pass epikoi
+OK Logged in.
list
+OK 3 messages:
1 4997
2 1217
3 480
.
quit
+OK Logging out.

Exactement la même chose. Autrement dit, si nous n'effaçons pas explicitement les messages sur le serveur, ils y restent, même si nous les lisons.

POP3 et les MUA

POP3 est un protocole simple. Pourtant la plupart des clients de messagerie (Thunderbird, Outlook etc.) ne l'exploitent pas pleinement.

Généralement notre client de messagerie effectue par défaut, la suite des opérations suivante :

  • ouverture de la session POP3 ;
  • identification du client (user et pass) ;
  • récupération en local puis effacement de tous les messages présents sur le serveur (list, retr, dele) ;

Généralement, il est au moins possible de demander au MUA de laisser une copie sur le serveur (la commande dele n'est plus envoyée). Dans ce cas, le MUA tient à jour (en principe) une liste des index de messages déjà lus, de manière à ne pas les récupérer à nouveau à chaque session.

Il faut bien noter que dans tous les cas, les messages lus sont copiés en local, même s'ils ne sont pas détruits sur le serveur.

Utiliser POP3 lorsque l'on est amené à lire sa messagerie depuis plusieurs postes n'est pas bien pratique. Il faut en effet prévoir une stratégie qui permette d'effacer les messages sur le serveur une fois que l'on est assuré de les avoir récupérés sur chaque poste.

De plus, les messages sont dupliqués sur chaque poste client utilisé, il faut les re-trier sur chaque poste, etc. IMAP va beaucoup nous aider dans ce cas.