Client POP3 en C - Recherche dans une chaine
Bonjour,
Je suis actuellement en train de coder un client POP3 en C et je me permets de poser cette question car je suis un peu bloquée.
En effet, je voudrais récuperer l'expéditeur et le sujet de chaque mail en utilisant la commande RETR, la commande TOP de la RFC étant optionnelle.
Simplement, je ne vois pas vraiment comment extraire ces deux champs de mon message. Sscanf ne peut pas marcher, et étant débutante en C je ne vois pas trop koi utiliser à la place...
J'attends votre aide,
Merci beaucoup
Titelily Smile
Re: Client POP3 en C - Recherche dans une chaine
Citation:
Envoyé par titelily
Simplement, je ne vois pas vraiment comment extraire ces deux champs de mon message. Sscanf ne peut pas marcher, et étant débutante en C je ne vois pas trop koi utiliser à la place...
Donne un exemple de ligne à analyser et de données extraites[1].
Explique pourquoi sscanf() ne peut pas fonctionner.
--------------------------
[1] Ici, on parle 'langage', pas 'application'. POP3, je ne veux pas savoir ce que c'est.
Re: Client POP3 en C - Recherche dans une chaine
Citation:
Envoyé par titelily
Sscanf ne peut pas marcher, et étant débutante en C je ne vois pas trop koi utiliser à la place...
et
Citation:
Etant donné que le texte que je récupère n'est pas formaté, je ne peux pas utiliser sscanf... C'est pour ca que je me tourne vers vous afin de trouver une autre méthode...
Mouais, sscanf fonctionne très bien... ;)
Regarde :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#include <stdio.h>
#define TAILLE 80
#define S_TAILLE "80"
int main(void){
FILE *f;
char tab[TAILLE] = {0};
char res[TAILLE] = {0};
const char *file = "test.txt";
f = fopen(file, "r");
if (!f){
exit(1);
}
while (fgets(tab, sizeof tab, f)) {
if (sscanf(tab, "From:%"S_TAILLE"[^\n]", res) > 0){
printf("expediteur : %s\n", res);
}else if (sscanf(tab, "Subject:%"S_TAILLE"[^\n]", res) > 0){
printf("sujet : %s\n", res);
}
}
fclose(f);
return 0;
} |
J'ai pris ton fichier de test en exemple, et ca donne :
Citation:
$ ./a.out
expediteur : Test User
sujet : Test
C'est pas ce que tu veux ?
Re: Client POP3 en C - Recherche dans une chaine
Citation:
Envoyé par ?
Il manque des trucs (ignorer la casse des tokens, NULLité de Token/POP3Line, duplication "propre" de la valeur résultat, ne pas détruire la ligne POP3 pendant l'analyse, gérer le multiligne, etc...), mais je pense que tu sauras le faire, non ?
Moi non j'ai rien compris ... à tous mais surtout au dernière ligne ! LOL!
Citation:
Envoyé par Pouic
Citation:
Envoyé par titelily
Sscanf ne peut pas marcher, et étant débutante en C je ne vois pas trop koi utiliser à la place...
et
Citation:
Etant donné que le texte que je récupère n'est pas formaté, je ne peux pas utiliser sscanf... C'est pour ca que je me tourne vers vous afin de trouver une autre méthode...
Mouais, sscanf fonctionne très bien... ;)
Regarde :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#include <stdio.h>
#define TAILLE 80
#define S_TAILLE "80"
int main(void){
FILE *f;
char tab[TAILLE] = {0};
char res[TAILLE] = {0};
const char *file = "test.txt";
f = fopen(file, "r");
if (!f){
exit(1);
}
while (fgets(tab, sizeof tab, f)) {
if (sscanf(tab, "From:%"S_TAILLE"[^\n]", res) > 0){
printf("expediteur : %s\n", res);
}else if (sscanf(tab, "Subject:%"S_TAILLE"[^\n]", res) > 0){
printf("sujet : %s\n", res);
}
}
fclose(f);
return 0;
} |
J'ai pris ton fichier de test en exemple, et ca donne :
Citation:
$ ./a.out
expediteur : Test User
sujet : Test
C'est pas ce que tu veux ?
si ça te dérange pas pourrait tu m'expliquer ton code ?
Merci.