Lire des mails via un netStream extremement lent.

sspizer Messages postés 38 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 23 février 2009 - 4 juil. 2007 à 16:19
sspizer Messages postés 38 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 23 février 2009 - 6 juil. 2007 à 14:45
Bonjour à tous.

Je suis en train de développer une application qui lit mes mails sur un server.

Le probleme c'est que lorsqu'il y a une pièce jointe dans un de mes
mails tout de suite le contenu du mail passe de 2000 lignes à très
facilement 20 000 lignes.

Et dans ce cas mon application met presque 5 minutes a lire l'intégralité du mail via un le net.


Mes attentes sont:

1) Récupérer l'intégralité du mail, sans que ça mette trop de temps à lire. (comme outlook par exemple)


Voici en gros le code que j'utilise:

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

 
 
//ON SE CONNECTE
//Create server POP3 with port 110
TcpClient tcpClient = new TcpClient();
tcpClient.Connect(server, port);
 
//Create a network stream to retrieve data from the TCP client
NetworkStream netStream = tcpClient.GetStream();
 
//We need a stream reader to be able to read the network stream
StreamReader strReader = new StreamReader(netStream);
 
 
if(tcpClient.Connected)
{
//ON DONNE LE LOGIN
log += strReader.ReadLine();
log += "
";
 
//Buffer to which we're going to write the commands
byte[] writeBuffer = newbyte[1024];
 
//We'll be passing ASCII characters
ASCIIEncoding enc = new System.Text.ASCIIEncoding();
 
//Pass the username to the server
writeBuffer = enc.GetBytes("USER " + login + "\r\n");
netStream.Write(writeBuffer, 0, writeBuffer.Length);
 
//ON DONNE LE PASS
//Give the password to the server
writeBuffer = enc.GetBytes("PASS " + pass + "\r\n");
netStream.Write(writeBuffer, 0, writeBuffer.Length);
 
//ON DEMANDE DE LIRE LE PREMIER MAIL
writeBuffer = enc.GetBytes("RETR 1 \r\n");
netStream.Write(writeBuffer, 0, writeBuffer.Length);
 
//ON LIT LE MAIL
while(true)
{
string line = strReader.ReadLine();
if(line == ".")break;/*les mails se finissent tous par "."*/
elsecontinue;
}
 
writeBuffer = enc.GetBytes("QUIT\r\n");
netStream.Write(writeBuffer, 0, writeBuffer.Length);
strReader.Close();
netStream.Close();
 
}
 

<!-- END TEMPLATE: bbcode_code -->

Rien que faire ça sur un mail qui contient 3 pieces jointes et dont la
totalité du mail fait 2 mo ça prend bien 4 vrais minutes et je sais que
c'est faisable de le lire en 1 secondes max puisque outlook le fait
bien.


TOUTES propositions sont les bienvenues.

4 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
4 juil. 2007 à 17:19
Salut,
Dans Outllook, la pièce jointe n'est pas téléchargée de suite. Il affiche d'abord le message, puis la pièce jointe est téléchargée lors de son ouverture. Ce serait d'ailleurs plutot dangereux qu'Outlook télécharge de lui-même les pièces jointes sans l'avis de l'utilisateur à la simple lecture du message.
Trouve donc un moyen de séparer le corps du message des pièces jointes, et si l'envoyeur est une personne de confiance, à la limite télécharge la pièce jointe en background, sinon télécharge sur la demande.

<hr size="2" width="100%" />Julien.
0
sspizer Messages postés 38 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 23 février 2009
6 juil. 2007 à 10:25
en fait je me disais que m'on code était à l'origine de la lenteur.
est ce que c'est la bonne façon de le faire?
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
6 juil. 2007 à 13:45
J'ai vu que tu avas posé une autre question dans laquelle tu parlais de la pièce jointe, tu as donc trouvé un moyen de l'identifier... il ne te reste plus qu'à la voir arriver pour ne pas la télécharger c'est tout...

<hr width="100%" size="2" />Julien.
0
sspizer Messages postés 38 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 23 février 2009
6 juil. 2007 à 14:45
oué mais j'ai déjà testé de la récupéré à part ça prend beaucoup trop de temps pour le peu de taille que fait la photo.
A mon avis la lenteur viens soit de la facons que je récupére mon mail soit il manque quelque chose.
0
Rejoignez-nous