TP donné le: | vendredi 17 novembre 2000 |
A rendre le: | vendredi 8 décembre 2000 |
On se propose d'implanter un client POP (Post Office Protocol) simple dont le but est d'afficher des informations sur le contenu d'une boîte aux lettres électronique.
L'objectif de ce TP est de s'initier à la programmation en Tcl/Tk, et à l'accès réseau, au travers de l'écriture d'un client simple. Dans ce TP on manipulera les primitives et commandes du protocole POP pour communiquer avec un serveur de courrier électronique.
Il s'agit d'écrire un client qui:
Les informations générales désirée sont les suivantes:
Les informations pour chaque message sont les suivantes:
III.A Client POP:
Utilisez la commande 'socket' de Tcl côté client; le serveur à utiliser est cuimail.unige.ch, et le port est 110. Ouvrez votre boîte aux lettres (appelée maildrop) à l'aide des requêtes POP 'user user' et 'pass password'. Le user est votre login personel, ainsi que votre password. La requête 'stat' donne le nombre d'octets total occupé par les messages en attente. La requête 'uidl i' (i = numéro du message) donne un identificateur unique de message, ou UIDL. A la fin fermez la connexion: avec la requête 'quit', et fermez le socket avec 'close'.
Exemple:
# 1) Ouvrir la connexion avec le serveur set socketID [socket $pophost $port] gets $socketID line # 2) Se logger sur sa boite aux lettres en donnant # son username et son password # Les variables $user et $password auront été définies auparavant puts $socketID "USER $user" flush $socketID gets $socketID line puts $socketID "PASS $password" flush $socketID gets $socketID line # ici il est possible de récuperer le nombre de messages # en attente sur le serveur -> n # 3.a) Exemple: connaitre le nombre de messages en attente, # ainsi que le nombre total d'octets puts $socketID "STAT" flush $socketID gets $socketID line # ici on peut stocker le nombre de messages -> n # 3.b) Exemple: recuperer l'identification du message # no i (i entre 1 et n) puts $socketID "UIDL $i" flush $socketID gets $socketID line # ici on stocker l'uidl... # 4) Fermer la connexion puts $socketID "QUIT" flush $socketID gets $socketID line close $socketID
Remarque: Il est important de fermer la connexion à la fin de chaque session comme l'exemple ci-dessus ('quit' + fermeture du socket), car un maildrop n'accepte qu'une seule connexion à la fois: votre logiciel de courrier électronique a aussi besoin de se connecter sur le serveur.
III.B Informations demandées:
Les commandes telles que 'stat' et 'uidl' ci-dessus donnent déjà des informations. Concernant l'entête et le corps du message, vous aurez besoin des commandes suivantes: 'retr i', qui rend le contenu complet du message no i, y compris l'entête, et 'top i m' qui rend l'entête + les m 1ères lignes du corps seulement. Pour ces requêtes le serveur répond par plusieurs lignes, la dernière ligne étant un point (".") seul. L'instruction 'regexp' du langage Tcl vous sera probablement utile pour isoler les champs "From", "To" et "Subject". Voici 2 exemples de réponses à la requête 'retr': un message simple , et un message multi-parties au format MIME. Dans ce TP on évitera d'utiliser la commande 'dele', qui sert à supprimer un message du serveur...
Question: qu'est-ce qui vous permet de distinguer l'entête du corps du message dans la réponse du serveur ?
III.C Interface graphique:
On se contetera d'un interface graphique simple, avec un bouton qui permet de lancer la connexion et la récupération des informations, une fenêtre pouvant contenir du texte afin d'y afficher toutes les informations, et un bouton pour quitter.
Des widgets 'entry' seront utilisés pour spécifier:
Il doit être possible de relancer la connexion et l'affichage des informations autant de fois que l'on veut sans quitter le programme, et les paramètres d'entrée ci-dessus doivent pouvoir être modifiés à tout moment. Le password peut être "masqué" à l'aide de l'option '-show *' du widget 'entry'.
Afin de produire un code lisible, il est préférable de commenter les lignes de code que vous écrivez.
Il est aussi demandé de fournir un rapport d'une page afin d'expliquer la conception du client POP que vous avez développé. Vous pouvez également noter les problèmes que vous avez rencontrés ainsi que vos remarques concernant le TP.
Le rapport et le code du programme peuvent être remis par e-mail à l'adresse suivante: Frederic.Deguillaume@cui.unige.ch.
Site Hosting: Bronco