/*
Fichier vsourcemail.c
Auteur Bernard Chardonneau
Logiciel libre, droits d'utilisation précisés en français
dans le fichier : licence-fr.txt
Traductions des droits d'utilisation dans les fichiers :
licence-de.txt , licence-en.txt , licence-es.txt ,
licence-it.txt , licence-nl.txt , licence-pt.txt ,
licence-eo.txt , licence-eo-utf.txt
Droits d'utilisation également sur la page web :
http://libremail.tuxfamily.org/voir.php?page=droits
Ce programme affiche un mail en attente de téléchargement
(ou de destruction).
Un fichier de configuration est utilisé pour se connecter à la
boite aux lettres.
Le mail à afficher est repéré par son numéro d'ordre dans la
liste des mails sur le serveur.
*/
#define appli // pour la déclaration de variables globales à l'application
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "messages.h"
#include "buflect.h"
#include "ficonf.h"
#include "pop.h"
/* prototype */
void affsource (int numes);
/* programme principal */
int main (int nbarg, char *varg[])
{
FILE *fconf; // descripteur du fichier de configuration
int numes; // numéro du mail courant
// récupération du nom de l'exécutable
memcom (*varg);
// controle du nombre d'arguments
if (--nbarg == 2)
{
// ouvrir le fichier de configuration
fconf = ouvre_ficonf (varg [2]);
if (fconf)
{
// connexion sur le compte mail du serveur pop
if (connect_pop (fconf))
{
// récupérer le numéro de mail
numes = atoi (varg [1]);
// afficher ce mail si possible
if (numes > 0 && numes <= nbmails ())
affsource (numes);
else if (numes > 0)
// "Numéro de mail trop grand"
affiche_err ("NUMAIL_TROP_GRAND");
else
// "Numéro de mail %s incorrect"
aff_err_arg ("NUMAIL_FAUX", varg [1]);
// se déconnecter proprement du serveur pop
deconnect_pop ();
}
// on n'a plus besoin du fichier de configuration
fclose (fconf);
}
}
else
// "Syntaxe : %s [-(h|H|b|B)] numéro_message fichier_configuration"
psyntaxe ("SYNT_VSOURCEMAIL");
// pour faire plaisir à gcc qui veut une fonction main de type int
return (0);
}
/* lit le mail choisi et l'affiche sans traitement des lignes */
void affsource (int numes)
{
char bufw [120]; // buffer d'envoi d'une requête
// demande de lecture du message
sprintf (bufw, "RETR %d", numes);
env_pop (bufw);
// "Message %d\n"
printf (message ("AFF_NUMAIL"), numes);
// lire une ligne de l'entête du message
lire_pop ();
// lecture et affichage du source du mail
do
{
// affichage de la dernière ligne lue
puts (buf_lect);
// et lecture de la suivante
lire_pop ();
}
// on s'arrête en fin de mail
while (buf_lect [0] != '.' || buf_lect [1] != '\0');
}