Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lecture de mails, collecte de besoins

31 réponses
Avatar
Gloops
Bonjour tout le monde,

J'=E9tais habitu=E9 avec d'autres langages =E0 trouver =E0 t=E9l=E9charge=
r des=20
routines assez simples =E0 utiliser pour lire des mails. D'ailleurs c'est=
=20
simple, =E0 ce que je me rappelle sur salemioche.com (mais d=E9m=E9nag=E9=
=20
depuis) on trouvait une page qui pr=E9sentait le protocole POP, et par=20
ailleurs l'impl=E9mentation en VB6.

Sous C#, j'ai l'impression qu'il y a eu moins de monde sur la question.

J'ai quand m=EAme trouv=E9 quelque chose d'int=E9ressant l=E0 :
http://www.csharpfr.com/codes/CLIENT-POP3_11467.aspx

En client lourd on trouve l=E0 un travail sur les pi=E8ces jointes, qui p=
eut=20
n=E9cessiter quelques petites mises au point mais reste int=E9ressant com=
me=20
point de d=E9part sur ce sujet, mais est plus lourd =E0 adapter en client=
=20
l=E9ger :
http://www.csharpfr.com/codes/INTERFACE-POPMAIL-PIECES-JOINTES_11559.aspx=


Pour rappel le client l=E9ger est l'application qui s'attache =E0 affiche=
r=20
le plus rapidement possible la liste des mails re=E7us, et pour favoriser=
=20
la rapidit=E9 r=E9alise peu ou pas de traitement sur le corps de chaque=20
mail. J'en ai par exemple r=E9alis=E9 un avec un reportViewer, ce qui per=
met=20
d'imprimer la liste des mails, qui peut =EAtre int=E9ressante avant de=20
purger le serveur.

Il me semble bien avoir travaill=E9 aussi avec quelque chose=20
d'interm=E9diaire entre le client l=E9ger et le traitement des pi=E8ces=20
jointes, mais ce que je retrouve =E0 cet instant est en VB6.

A pr=E9sent, comme j'ai plusieurs applications =E0 =E9crire faisant inter=
venir=20
des mails, je m'attaque =E0 une DLL =E0 appeler depuis une application=20
WinForm ou un site web. =E7a commence =E0 fonctionner, je suppose que ce =
qui=20
va arriver est que je vais mettre en =9Cuvre ce qui manque sur mon site, =

et revenir l=E0-dessus ensuite.

Ce type de d=E9veloppement =E9tant destin=E9 =E0 =EAtre utilis=E9 dans de=
nombreuses=20
applications, il est pr=E9f=E9rable qu'il corresponde aux souhaits d'un=20
grand nombre. Aussi, j'=E9num=E8re les grandes lignes, de fa=E7on qu'on p=
uisse=20
m'indiquer quelque chose qui para=EEt manquer.

Par ailleurs, un travail (non publi=E9 me semble-t-il) a =E9t=E9 r=E9alis=
=E9 sur=20
le premier projet mentionn=E9 ci-dessus pour d=E9coder les sujets (et=20
accessoirement les noms des correspondants puisqu'ils peuvent aussi =EAtr=
e=20
=E9crits avec des caract=E8res accentu=E9s), toutefois ce travail ne g=E8=
re pas=20
encore les UTF8. En cherchant quelque chose l=E0-dessus je vais bien=20
trouver, est-ce que je peux cette fois esp=E9rer arriver =E0 quelque chos=
e=20
d'exhaustif sur le d=E9codage des sujets ? J'ai commenc=E9 par chercher=20
quelque chose de tout pr=EAt, mais en vain. A ce stade le d=E9codage=20
fonctionne en jeu de caract=E8res constant.

A ce stade, voici ce qui fonctionne sur ce dont je parle :
- connexion avec les informations re=E7ues en param=E8tres du constructeu=
r,=20
site, nom d'utilisateur, mot de passe ; le tout sur le port 110 en=20
protocole POP
- information de l'utilisateur =E0 l'aide de deux d=E9l=E9gu=E9s, fournis=
sant=20
deux niveaux d'information (ce que sur le projet ci-dessus on trouve=20
respectivement dans la barre d'=E9tat et le richtextbox).
- sur chaque message il est possible d'obtenir la date, le sujet,=20
l'=E9metteur (from), le destinataire (to), du dernier message lu, et=20
l'int=E9gralit=E9 du message, ceci n=E9cessitant bien entendu une connexi=
on=20
plus longue (par d=E9faut on ne lit que les 30 premi=E8res lignes du mess=
age=20
pour avoir les ent=EAtes, et lorsque l'application appelante demande=20
l'int=E9gralit=E9 du message on relance une lecture sur le serveur)
- =E0 r=E9aliser dans quelques semaines : internationalisation de ce=20
traitement, pour le moment les messages sont conserv=E9s dans la langue=20
d'origine

Au point o=F9 j'en suis le stockage des informations de connexion puis de=
s=20
mails re=E7us est du ressort de l'application appelante. Il ne me para=EE=
t=20
d'ailleurs pas exclu d'en rester l=E0 sur ce point, d'autant que le=20
stockage de param=E8tres d'application crypt=E9s se fait de mani=E8re=20
diff=E9rente en Winform et en Webform.

10 réponses

1 2 3 4
Avatar
Patrice
Trop de détails...

Il faudrait surtout les qq lignes qui montrent le code utilisé (pas les 3
lignes qui ne montrent que l'instanciation et pas tout le code qui n'a rien
à voir avec le problème).

Une petite recherche me donne :
http://www.kbcafe.com/articles/HowTo.POP3.CSharp.pdf qui me semble très
bien. La réponse serait +OK...

Après il doit y avoir un article 1 qui montre la classe de base qui implante
la communication elle-même.



"Gloops" a écrit dans le message de groupe de
discussion :
Ah au fait, je réalise que si on se met à parler d'erreur d'API, il manque
quelques infos :

Microsoft Visual Studio 2005
Version 8.0.50727.762 (SP.050727-7600)
Microsoft .NET Framework
Version 2.0.50727 SP2

Installed Edition: Professional

Microsoft Visual Basic 2005 77626-009-0005252-41150
Microsoft Visual Basic 2005

Microsoft Visual C# 2005 77626-009-0005252-41150
Microsoft Visual C# 2005

Microsoft Visual C++ 2005 77626-009-0005252-41150
Microsoft Visual C++ 2005

Microsoft Visual J# 2005 77626-009-0005252-41150
Microsoft Visual J# 2005

Microsoft Visual Web Developer 2005 77626-009-0005252-41150
Microsoft Visual Web Developer 2005

Microsoft Web Application Projects 2005 77626-009-0005252-41150
Microsoft Web Application Projects 2005
Version 8.0.50727.762

Crystal Reports AAC60-G0CSA4B-V7000AY
Crystal Reports for Visual Studio 2005


Microsoft Visual Studio 2005 Professional Edition - ENU Service Pack 1
(KB926601)
This service pack is for Microsoft Visual Studio 2005 Professional
Edition - ENU.
If you later install a more recent service pack, this service pack will be
uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/926601

MySQL Connector/Net 6.0.4
Data design and management tools for MySQL. Copyright © 2007-2009 MySQL
AB

Security Update for Microsoft Visual Studio 2005 Professional Edition -
ENU (KB937061)
This Security Update is for Microsoft Visual Studio 2005 Professional
Edition - ENU.
If you later install a more recent service pack, this Security Update will
be uninstalled automatically.
For more information, visit http://support.microsoft.com/kb/937061




Avatar
Gloops
[Plantage lors de l'effacement d'un mail par la commande POP DELE]
[Trop d'infos fournies : détail de la version Visual Studio utilisée]

C'est-à-dire que la seule piste d'infos que j'aie trouvée comportait
l'intitulé "Unrecoverable API error" : c'est ce qui m'a encouragé à
indiquer le détail de la version que j'utilise, ce que j'avais d'abord
oublié de faire. Si quelqu'un a eu vent d'un problème rencontré sur une
version donnée, j'imagine qu'il ne peut faire le recoupement qu'avec
toute la sauce ?

C'est vrai que, pour en revenir au code maintenant, dans le cadre d'une
communication asynchrone il y a intérêt à savoir ce qu'on a envoyé et
reçu avant. C'est bien pour en réduire l'impact que j'ai commencé p ar un
flush, deux fois noop et lecture de la réponse, et ensuite j'envoie DEL E
1 et je m'attendais, à défaut même de réponse, à avoir au moins -1 en
caractère, non ?

ça, c'est le shéma. Pour la logique de communication avec le serveur de
mail je me suis inspiré sans vergogne de

http://www.csharpfr.com/codes/CLIENT-POP3_11467.aspx

et j'ai extrait ce code dans un module dll en établissant la
communication avec l'utilisateur (l'affichage des informations à
l'écran) avec des délégués. L'exécution pas à pas laisse ente ndre que
vraisemblablement le problème ne se trouve pas à ce niveau. Dans l'or dre
d'appel des fonctions de communication avec le serveur de mail, peut-êt re ?

Cette application établit sans aucun problème la liste des messages
reçus, en en extrayant pour chacun la date, l'expéditeur, le
destinataire, le sujet (qui est décodé mais après la réception do nc ça
sort du sujet de ce fil). Donc, a priori, je me disais que la logique de
communication ne devait pas être toute fausse. Là où ça se gâte , c'est
juste pour effacer un message.

Dans ma recherche, à la place de howto j'avais mis sample, donc
forcément le résultat était présenté différemment. Lors d'un rapide
survol il m'a toutefois semblé que les mêmes principes avaient été
appliqués. Il est vrai que la communication elle-même peut être
implémentée par diverses instructions.

En émission on a ça :
private void send(String bToSend)
{
sr.BaseStream.Flush();
Byte[] bOutStream;
ns.Write(bOutStream = bCast(bToSend), 0, bOutStream.Length );
}

En réception, lors du premier essai on avait ça :
//Log l'echange
private void aLog()
{
rtbLog.AppendText(sr.ReadLine()+"rn");
sr.BaseStream.Flush();
}
(rtbLog était un contrôle RichTextBox ; dans mon module dll c'est dev enu
une variable texte, qui est transmise ensuite par des délégués)
strTemp = sr.ReadLine();
(le retour à la ligne devient du ressort de l'application appelante)

Comme je le disais, au niveau réception j'ai bricolé depuis, pour fai re
la réception caractère par caractère, mais le résultat laisse ent endre
que c'était naïf.

Si ça avait planté depuis le début ça aurait laissé entendre qu e tout
était faux, mais il n'y a que l'effacement du message qui plante (et pa s
sous Telnet). Est-ce que ça n'aurait pas tendance à être bizarre ?

Comme ça a planté lors de
send("DELE 1nr");
alog();

et ce au niveau de la commande de réception, à savoir Readline, j'ai
d'abord essayé de changer la commande de réception, pour essayer
caractère par caractère

private string lecture()
{
StringBuilder sb = new StringBuilder();
int b = ns.ReadByte();
if (b == -1)
{
return ("");
}
else
{
if (b == 10) b = ns.ReadByte();
sb.Append((char)b);
while ((b != -1) && (b != 13))
{
b = ns.ReadByte();
sb.Append((char)b);
}
return (sb.ToString());
}
}

et pour éviter de me prendre les pieds dans le tapis avec quelque chose
qui serait resté dans le tampon j'ai purgé comme ça :
send("NOOPnr");
alog();
send("NOOPnr");
alog();
send("DELE 1nr");
alog();

(dans le alog() j'ai donc remplacé sr.ReadLine() par lecture())

Eh bien après DELE, ça plante (enfin je veux dire que ça ne répon d plus
et ça ne rend pas le contrôle au programme) lors du premier ReadByte -et
ça faisait pareil avec ReadLine sinon je n'aurais pas cherché la peti te
bête.

A défaut d'avoir été plus bref, est-ce que j'ai au moins réussi à être
plus lisible ?
Avatar
Jean-Michel Berthier
Bonjour,
Je ne suis pas expert dans la programmation mail, mais je reviens à mon idée
de base.
Si j'ai bonne mémoire, une différence entre POP et IMAP, c'est que POP
retire les messages du serveur une fois lus.
Je suppose que le plantage ne vient pas de VS, mais du fait que tu veux
faire une suppression d'une information qui n'existe plus.
Enfin, je dis ça comme ça.


"Gloops" a écrit dans le message de
news:
Bonjour tout le monde,

Bon, maintenant qu'on a commencé à parler de mails je suppose que ma
question sera très bien ici.

Mon logiciel fonctionne très bien, sauf pour la commande (POP) DELE.

Au moment où je veux effacer un message, voilà le programme qui se
plante en cherchant à lire la réponse du serveur mail. J'ai cru que le
serveur ne renvoyait rien, qu'il avait pu y avoir un mélange de pinceaux
dans l'ordre des commandes qui lui étaient passées, alors j'ai cherché à
lire caractère par caractère, en accédant par ReadByte plutôt que
ReadLine, mais peine perdue : d'après la doc j'attends -1 en réponse si
il n'y a rien à lire, or comme réponse j'ai perte de contrôle par
absence de réponse (la touche F11, au lieu de mettre en jaune la ligne
suivante, fait disparaître la couleur jaune du panneau de code source,
et puis voilà, et je ne réussis à refaire fonctionner Visual Studio en
exécution qu'après l'avoir fait redémarrer ; pareil pour F10).

Voici les objets utilisés :
sockServer = new TcpClient(sServer, 110);
ns = sockServer.GetStream();
sr = new StreamReader(ns);

Suite à l'échec sur sr.ReadLine() j'ai tenté ns.ReadByte() mais sans
davantage de succès.

Au bout d'un certain nombre de tentatives (en redémarrant carrément
Visual Studio entre deux sinon le débugueur ne sait pas se débrancher,
voir ci-dessous), j'ai ce message :
A fatal error has occurred and debugging needs to be terminated. For
more details, please see the Microsoft Help and Support Web site.
HRESULT=0x80131c08. ErrorCode=0x0

Google ne connaît qu'une page avec ce numéro d'erreur (Pas 0, l'autre
avant), et elle est rédigée semble-t-il en Russe. Mon niveau de Russe
n'est pas suffisant ;) pour en tirer parti.

Le message invite à faire une recherche sur le site de Microsoft, mais
la réponse est fort explicite :
Sorry, no results found for: 80131c08

Dans l'outil MSDN c'est plus sophistiqué, puisqu'on a 7 canaux de
recherche, alors le nombre de réponses est 0+0+0+0+0+0+0.
Bon enfin au bout du compte je crois bien que ça fait 0 quand même.

Lorsque je veux arrêter mon application, m'est répondu :
Cannot detach from one or more processes:
[5172] WebDev.WebServer.EXE: Operation not supported. Unknown error :
0x80131300.
Do you want to terminate them instead?

ça c'est au bout d'un certain nombre de tentatives aussi, car avant,
c'est lorsque je cherchais à la démarrer de nouveau qu'on me disait
qu'un débugueur était déjà attaché, et qu'on me demandait si je voulais
continuer avec (et on me proposait de répondre par oui ou par non, et la
réponse honnête serait : "Pfffp, ben j'sais pô, moé" :) ).

Sur 80131300 Google a 137 réponses, mais la première commence par
"Buyers and sellers, find great deals on 80131300" et les suivantes
ressemblent, alors je crains fort de ne guère être très avancé.
Microsoft ne trouve toujours rien.
Ah si quand même chez Google si je mets error devant j'arrive sur une
page http://www.lifeasbob.com/Code/ErrorCodes.aspx qui donne une
énumération de numéros d'erreurs, dont
80131300 2148733696 CORDBG_E_UNRECOVERABLE_ERROR: Unrecoverable API error.
(plus le même site de forum que précédemment en Russe)

C'est déjà ça, mais je crains que ça me laisse un peu sec sur la
conduite à tenir.

C'est vrai que les applications exemples que j'ai téléchargées ont fait
l'impasse sur l'effacement de messages, donc comme ça on évite de se
planter :)

J'ai pensé à un dépassement du temps limite, mais si je traite plusieurs
messages sans les effacer ça se passe bien, donc j'aurais tendance à
hésiter à retenir cette piste.

Une idée, quelqu'un ?

Sous Telnet ça se passe bien, le serveur répond tout de suite à la
demande d'effacement, avec une ligne qui commence par +OK.
Avatar
Patrice
Pas vraiment...

Et TCpClient.Available indique quoi ? Je dirais que le serveur n'a
effectivement pas renvoyé de données donc on va attendre indéfiniment...

Généralement le plus simple en cas de problème est :
- d'écrire une application la plus simple possible qui ne montre que le
problème en question.

Genéralement cela permet :
- soit de trouver soi-même le problème (éventuellement cela marche donc cela
valide que le principe est ok et on peut alors comparer avec la "vraie"
application et voir les autres élements qui peuvent coincer, soit cela ne
marche toujours pas et c'est bien le principe même de fonctionnement qui est
en cause)
- soit de pouvoir poster ce code très simple et uniquement relatif à ce
problème pour que qq d'autre puisse l'examiner

Expliquer ce que tu fais en français sera toujours moins parlant que de
montrer du code (donc ni 3 lignes, ni toute une tartine avec des choses qui
n'ont rien à voir avec le problème précis)...

A titre d'exemple, j'essaierais éventuellement de voir éventuellement si je
rencontre le même problème avec un compte Google...

--
Patrice
Avatar
Gloops
Jean-Michel Berthier a écrit, le 05/09/2009 12:05 :
Bonjour,
Je ne suis pas expert dans la programmation mail, mais je reviens à m on
idée de base.
Si j'ai bonne mémoire, une différence entre POP et IMAP, c'est que POP
retire les messages du serveur une fois lus.
Je suppose que le plantage ne vient pas de VS, mais du fait que tu veux
faire une suppression d'une information qui n'existe plus.
Enfin, je dis ça comme ça.




Bonjour,

Le site iprelax.fr est clair sur le fonctionnement d'une session POP.
J'ai pratiqué ça plusieurs fois déjà, à la main sous telnet, et en
programmation sous VB. Il est fréquent, on peut même dire il est de
coutume, qu'un logiciel de messagerie efface les messages qu'il a lus
sous POP. Il le fait avec la commande DELE.

En revanche, ce n'est pas obligatoire. Tous les logiciels de messagerie
que je connais (Thunderbird, Eudora, Outlook Express) ont pour le
protocole POP une option "laisser les messages sur le serveur". Lorsque
la case correspondante est cochée, la commande DELE n'est pas appelée ,
et les messages ne sont pas effacés, ça permet de lire les mails au
bureau avant de partir et de les récupérer en rentrant à la maison, même
si pour faire ça le protocole POP n'est pas forcément ce qu'on emploi e
le plus couramment, on aurait plus tendance au bureau à utiliser un
webmail. Autre exemple toutefois, avant de purger mon serveur j'aime
bien réceptionner mes mails une fois sous Eudora et une fois sous
Thunderbird, vu qu'il y en a un qui est plus efficace pour les
impressions et les recherches, et l'autre qui gère aussi les newsgroups
et fait l'objet de nombreuses extensions bien pratiques.

Après le plantage, je relance l'application que je suis en train de
développer, et elle relit le message. C'est ainsi que je me retrouve,
sur l'adresse présumée du correspondant, avec une dizaine d'accusés de
réception (quoique là il faut que je vérifie ce qui se passe dans m a
base de données puisqu'une fois la date d'envoi de l'accusé de réce ption
enregistrée il ne devrait plus y en avoir d'autre d'envoyé, mais ça , ça
sort largement du sujet de ce fil).

Au demeurant il y aurait autre chose à tester, je suppose que lorsqu'un e
session POP est ouverte, le serveur devrait refuser d'effacer un des
messages depuis une autre session. Bon enfin ça ça ne concerne que le s
cas ou quelqu'un d'autre a le mot de passe, ou bien plusieurs logiciels
sont ouverts sur le même compte et l'un deux essaie d'effacer ce que
l'autre a ouvert en POP. Pour le moment je pense que je n'ai pas de
souci de ce côté.

Ce qu'il y a de pratique à partir d'une application qui fonctionne,
c'est qu'on a de bonnes bases pour démarrer.

http://www.csharpfr.com/codes/CLIENT-POP3_11467.aspx
En voilà une qui est au point (même si comme il est écrit sur la pa ge
indiquée on peut l'améliorer). Il s'agit d'un client léger : c'est une
application qui affiche rapidement la liste des messages en ligne sur le
compte indiqué. On peut la relancer un quart d'heure plus tard, elle
fera apparaître les mêmes messages, plus éventuellement d'autres qu i
auraient pu arriver dans l'intervalle.

La notion de client léger a au départ été créée dans deux but s :
- pour pouvoir purger les spams, à l'époque où on n'en recevait que
quelques-uns,
- pour savoir si on a reçu de nouveaux mails, de façon à charger so n
application mail principale (le "client lourd"), qui a priori met plus
de temps à se charger, surtout si on a installé de nombreuses extensi ons.

L'application à l'adresse mentionnée ci-dessus, dont je suis parti, s auf
si quelque chose m'a échappé, se concentre sur le second aspect.

Pour résumer je crois que je peux dire que si, le message est encore su r
le serveur tant que je n'ai pas appelé la commande DELE.
Avatar
Patrice
Donc je pensais à qq chose comme le code ci-dessous (éventuellement modifier
si ton POP n'utilise pas SSL). En réponse à mon DELE 1 j'ai une réponse +OK
marked for deletion.

Si tu ne vois pas ce qui cloche il faudrait que tu fasses qq chose du même
genre (donc réduit à a plus simple expression) et que tu montres le code.
Cela permettrait sans doute d'avancer plus efficacement sur ton problème...

using System;
using System.Diagnostics;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.IO;

namespace ConsoleApplication1
{
class Program
{
class Pop3
{
TcpClient client;
SslStream stream;

private string Read()
{
byte[] buffer=new byte[1024];
int length=stream.Read(buffer,0,buffer.Length);
return
System.Text.Encoding.ASCII.GetString(buffer,0,length);
}

private void Write(string Data)
{
byte[] buffer=System.Text.Encoding.ASCII.GetBytes(Data);
stream.Write(buffer);
}

public Pop3()
{
const string User="?";
const string Password="?";
const string Hostname="pop.gmail.com";
client = new TcpClient(Hostname, 995);
// GMail utilise SSL
stream=new SslStream(client.GetStream(),true);
stream.AuthenticateAsClient(Hostname);
Console.WriteLine(Read());
Write(string.Format("USER {0}rn",User));
Console.WriteLine(Read());
Write(string.Format("PASS {0}rn",Password));
Console.WriteLine(Read());
Write("DELE 1rn");
Console.WriteLine(Read());
}
}

static void Main(string[] args)
{
Pop3 client = new Pop3();
Console.ReadKey();
}
}
}
Avatar
Gloops
Patrice a écrit, le 05/09/2009 13:36 :
Pas vraiment...

Et TCpClient.Available indique quoi ? Je dirais que le serveur n'a
effectivement pas renvoyé de données donc on va attendre indéfini ment...



Ah, je ne l'avais pas vu, celui-là. C'est bien ça que je cherchais qu and
je me suis orienté vers ReadByte().


Généralement le plus simple en cas de problème est :
- d'écrire une application la plus simple possible qui ne montre que le
problème en question.



Oui, c'est une piste intéressante. ça ne me paraissait pas simple a
priori dans le cas d'une communication asynchrone, mais ça devrait êt re
gérable.


Bon, dans l'immédiat, puisque ça marche sans l'effacement, je vais
commencer par faire le déploiement sans, puisque le compte à purger e st
le mien ça ne dérangera personne que j'efface les messages à la mai n
quelques jours plus tard. Ensuite j'ai un monceau de courrier qui
m'attend et qui a tendance à s'épaissir sensiblement, et puis je revi ens.

Merci en tout cas pour ces quelques conseils.
Avatar
Patrice
Ok,

Je vois que c'est la deuxième fois que tu parles de com asynchrone. As tu
mis en place qq chose de particulier sur ce point ? Sinon je ne vois pas
quel est le problème ?

J'ai fait aussi un petit essai dans mon code précédent et si je ne lis pas
la réponse à une requête, la requête suivante ne génère pas de réponse. Se
pourrait-il que tu aies tout simplement oublié de lire une réponse
précédente ???

Bonne continuation


"Gloops" a écrit dans le message de
news:%
Patrice a écrit, le 05/09/2009 13:36 :
Pas vraiment...

Et TCpClient.Available indique quoi ? Je dirais que le serveur n'a
effectivement pas renvoyé de données donc on va attendre indéfiniment...



Ah, je ne l'avais pas vu, celui-là. C'est bien ça que je cherchais quand
je me suis orienté vers ReadByte().


Généralement le plus simple en cas de problème est :
- d'écrire une application la plus simple possible qui ne montre que le
problème en question.



Oui, c'est une piste intéressante. ça ne me paraissait pas simple a
priori dans le cas d'une communication asynchrone, mais ça devrait être
gérable.


Bon, dans l'immédiat, puisque ça marche sans l'effacement, je vais
commencer par faire le déploiement sans, puisque le compte à purger est
le mien ça ne dérangera personne que j'efface les messages à la main
quelques jours plus tard. Ensuite j'ai un monceau de courrier qui
m'attend et qui a tendance à s'épaissir sensiblement, et puis je reviens.

Merci en tout cas pour ces quelques conseils.
Avatar
Gloops
Patrice a écrit, le 05/09/2009 14:19 :
Donc je pensais à qq chose comme le code ci-dessous (éventuellement
modifier si ton POP n'utilise pas SSL). En réponse à mon DELE 1 j' ai
une réponse +OK marked for deletion.




ça effectivement je l'ai testé sous telnet comme ça j'en avais le c œur
net tout de suite. C'est vrai que si le serveur donnait une toute autre
réponse que celle à laquelle on s'attendait on pouvait toujours cherc her
autre chose.

ça craint parce que ma machine est un bourrin, le vendeur m'avait
prévenu (j'ai acheté ça avec les caisses vides il faut dire ;
réceptionner des mails il s'en sort, mais alors développer on sent qu e
c'est limite), et que je ne suis pas plus en avance sur mon courrier
qu'hier soir, mais pour la peine que tu t'es donné la peine d'écrire
tout le code je vais voir ce que ça donne.
Avatar
Gloops
Patrice a écrit, le 05/09/2009 14:35 :
Ok,

Je vois que c'est la deuxième fois que tu parles de com asynchrone. A s
tu mis en place qq chose de particulier sur ce point ? Sinon je ne vois
pas quel est le problème ?

J'ai fait aussi un petit essai dans mon code précédent et si je ne lis
pas la réponse à une requête, la requête suivante ne génère pas de
réponse. Se pourrait-il que tu aies tout simplement oublié de lire une
réponse précédente ???



C'est pour anticiper cette question que j'ai mis deux fois NOOP avant le
DELE.

NOOP, à part éviter le timeout, finalement ça ne sert qu'à ça : )

Mais tu as raison : pour tester un robinet, il faut le faire en dehors
d'une usine à gaz.


Bonne continuation



Merci.
1 2 3 4