CLASSE POUR CONNEXION À UN SERVEUR POP3 ET CHARGER LES EMAILS

cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 - 20 juin 2005 à 11:10
cs_boucherf Messages postés 6 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 22 février 2011 - 21 mars 2009 à 20:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32178-classe-pour-connexion-a-un-serveur-pop3-et-charger-les-emails

cs_boucherf Messages postés 6 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 22 février 2011
21 mars 2009 à 20:39
j'ai pas comprendre comment recuperer les fichiers joindre quelqu'un peut m'aider si urgent pls voila ma boit boucherfkhaled@gmail.com
chinois0013 Messages postés 33 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 2 juin 2009
24 févr. 2009 à 17:32
Bonjour,
Je n'arrive pas à récuperer le le body des message en texte brut...
J'aurais manqué quelques choses ? Même si j'arrive 4 après le code...
Merci
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
4 juil. 2008 à 20:00
Tout d'abord, pour répondre à CIPOLI, en espérant que ce ne soit pas trop tard.
L'espace de nom System.Web.Mail existe bien dans les versions plus récentes du framework. Par conséquent, on peut en déduire qu'il te manque une référence.

Gregfriends, j'avoue que je n'ai jamais essayer sur les serveurs gmail et 1and1. A l'époque où j'ai développé ce code, je ne connaissais même pas leur existence (existait-il d'ailleurs ?).
Dans ce code, je ne prends en compte que 2 méthodes pour les pièces jointes : quoted-printable et base64. Peut-être en existe-t-il d'autre, j'avoue ne pas avoir creusé. Néanmoins, celà te laisse une bonne piste pour tes recherches.

Cordialement
gregfriends Messages postés 1 Date d'inscription mardi 15 mai 2007 Statut Membre Dernière intervention 4 juillet 2008
4 juil. 2008 à 10:52
La récupération des pièces jointes ne fonctionne pas avec les serveurs gmail et 1and1. Je n'utilise pas les client mail outlook ou thunderbird. Est-ce normale ou aurais-je mal implémenté ton code ?
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
9 mai 2008 à 22:19
Bonjour,

C'était une vieille version du framework, la 1.1 il me semble. C'est possible qu'il y ait eu quelques modifications à ce niveau dans les dernières versions.
Je regarderais si j'ai le temps mais je t'avoue être un peu débordé en ce moment, donc ne m'en veux pas si je ne te donne pas de réponse.
Cipoli Messages postés 53 Date d'inscription mercredi 29 août 2007 Statut Membre Dernière intervention 31 mars 2010
9 mai 2008 à 17:59
Bonjour AshenShugar,

Voila ton code me semble super pour mon usage mais je n'arrive pas a le lancer.

J'ai le message d'erreur suivant : PopMail.cs(4): Le type ou le nom d'espace de noms 'Mail' n'existe pas dans la classe ou l'espace de noms 'System.Web' (une référence d'assembly est-elle manquante ?)

Il faut être en quel version de visual studio et quel framework merci.
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
7 avril 2008 à 20:03
Bien sûr que non, puisqu'elle est private ! Elle est appelée automatiquement lors du chargement des mails à la connexion au serveur. En revanche, si tu veux le contenu, tu récupères l'objet PopMail du mail que tu veux, tu récupères les bodies de ton objet PopMail et le body que tu veux suivant son type d'encodage.
Je ne sais pas quel examen tu passes, mais lorsque tu présentes une appli, le but n'est pas seulement de la réaliser mais surtout de la comprendre et pouvoir la modifier et éventuellement la faire évoluer à la demande de l'examinateur. Je t'encourage avant tout à comprendre et assimiler le code ci-dessus avant d'espérer faire quoique ce soit avec.
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
7 avril 2008 à 16:13
Par contre pour récupérer le contenu du message, dois-je faire appel à la méthode private void InfoParMail(int iTaille, int IdMessage) ?
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
7 avril 2008 à 14:40
C'est bon ça marche ! J'ai trouvé l'erreur, il se trouve que mon appli ne récupérer pas les données :
TcpClient(this.Server, portPop);
Il manquait le nom du serveur, le port était bien récupéré !
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
7 avril 2008 à 14:11
Bonjour, j'essaie de me connecter à la messagerie d'orange, en utilisant de le serveur pop.orange.fr, le port 995 et le port 110, j'ai utilisé les deux pour tester. J'ai désactivé mon anti-virus et j'ai quand même ce problème.
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
6 avril 2008 à 10:11
Je pense que le message d'erreur est clair : "l'ordinateur cible l'a expréssément refusée".
N'y aurait-il pas un firewall ou quelque chose qui l'empeche de se connecter sur le port donné ?
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
5 avril 2008 à 17:53
Erreur lors de la connexion au serveur.
System.Net.SocketsException : Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée 192…… : 110 ,
à Systen.Net.SocketsTcpClient…ctor(String hostname, Int32 port)
à Messagerie.PopMailsCollections.Connection() dans C:\Documents and Settings\Moi\Bureau\Projet\Messagerie\PopMail.cs : Ligne 53

Ici mon code :
private void Connection()
{

int NbMail = 0;
string sOut = "user " + this.User + "\r\n";
int portPop = Convert.ToInt32(fconfig.txtPortPop.Text);
try
{
co = new TcpClient(this.Server, portPop);
ns = co.GetStream();
sr = new StreamReader(ns);
SendStream(sOut);
sr.ReadLine();
sr.ReadLine();
sOut = "pass " + this.PassWord + "\r\n";
SendStream(sOut);
if((sr.ReadLine().ToString()).Substring(0,4) != "-ERR" )
{
NbMail = RecupMsgInfo(1);
this.MailCollections = new PopMail[NbMail];
RecevoirMessage(NbMail);
}
else
MessageBox.Show("Identification refusée !", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch(ArgumentNullException e)
{
MessageBox.Show("Erreur lors de la connexion au serveur.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (SocketException e) // l'erreur se situe ici
{
MessageBox.Show("Erreur lors de la connexion au serveur.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
this.sr.Close(); // c'est valeur son trouvé nul lorsque j'effectue le débogage
this.ns.Close();
this.co.Close();
}

J'ai mis des commentaires pour identiquer ou ce trouve l'erreur.
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
5 avril 2008 à 16:16
il y aurait une erreur à la ligne 53 dans la classe popMail
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
5 avril 2008 à 16:05
Merci, il se trouve que j'ai une erreur de connexion au serveur. System.Net.Sockets.SocketException : Aucune connexion n'a pu être établie car l'ordinateur cible l'a expréssément refusée "mon adresse ip : 110" à :
system.net.sockets.TcpClient..ctor(string hostname, int32 port)
à Messagerie.PopMailsCollectios.Connection()
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
4 avril 2008 à 19:02
Tu t'égares totalement : il faut charger la collection pour avoir chaque mail. De plus, tu n'indiques nulle part le serveur, le login ou le mot de pass.

private void btRecevoir_Click(object sender, EventArgs e)
{
PopMailsCollections MyMailsCollection = new PopMailsCollections(Serveur, Login, Pass);


for (int i; i < MyMails.Count(); i++)
{
PopMail mongetMail= MyMailsCollection.GetMail(i);
ListViewItem maListView = new ListViewItem();
maListView.SubItems.Add(mongetMail.Date);
maListView.SubItems.Add(mongetMail.From);
maListView.SubItems.Add(mongetMail.Subject);
lsvMessage.Items.Add(maListView);
}
}
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
4 avril 2008 à 11:35
voilà ce que j'ai fait mais ça ne fonctionne pas :
private void btRecevoir_Click(object sender, EventArgs e)
{
PopMail mongetMail = new PopMail();
ListViewItem maListView;

maListView = new ListViewItem();
maListView.SubItems.Add(mongetMail.Date);
maListView.SubItems.Add(mongetMail.From);
maListView.SubItems.Add(mongetMail.Subject);
lsvMessage.Items.Add(maListView);
}
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
4 avril 2008 à 10:18
J'ai moi-même développé cette classe pour le présenter en exam.
Lorsque ta classe PopMailsCollections s'est connectée, elle a récupéré automatiquement les mails en tant qu'objet PopMail dans la collection MailCollections. Alors soit tu vas taper directement dans cette collection, soit tu utilises la méthode PopMailsCollection.GetMail(int id) qui te récupère un mail par rapport à son numéro.
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
4 avril 2008 à 09:00
Après comment je fais pour récupérer les mails dans une listview à partir de ta classe ? Je suis désolé de poser toute ses questions, mais j'ai le cerveau en compote de je en période d'exam, et pour lundi je dois avoir 4 programme de fait !! Et là je galère...
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
4 avril 2008 à 08:43
Merci beaucoup !
Je vais faire ça desuite ! ;)
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
3 avril 2008 à 22:45
Bonjour,

C'est dans le constructeur de PopMailsCollections. Le premier argument du constructeur est l'adresse du serveur en string.

En d'autre terme :
PopMailsCollections MyPopMailsCollections = new PopMailsCollections(TextBoxServeur.Text, TextBoxLogin.Text, TextBoxPasswd.Text);

Voila, en espérant avoir répondu à ta question.
Tartuffe245 Messages postés 32 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 9 avril 2009
3 avril 2008 à 21:46
Bonjour,
Je créé actuellement un programme de messagerie dans lequel je spécifie le serveur POP3 dans un textbox et je voudrais savoir comment utiliser ta classe pour récupérer le serveur pop que je rentre manuellement?
Merci de me répondre
MISMAQC Messages postés 2 Date d'inscription lundi 19 septembre 2005 Statut Membre Dernière intervention 17 février 2006
17 févr. 2006 à 14:02
Chez moi, ça ne récupère ni le body, ni les pièces jointes !!!
une idée ??
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
24 juin 2005 à 20:28
Cool, merci beaucoup ! Et dire que je me suis enquiquiné à tout indenter à la main !!! :D
cs_jmhC Messages postés 108 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 10 août 2007
22 juin 2005 à 18:17
je rectifie "indenter" au lieu de "identer"!
cs_jmhC Messages postés 108 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 10 août 2007
21 juin 2005 à 21:42
J'utilise également SD.
menu contextuel => Clic-droit => identer ou ctrl+i
A+
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
21 juin 2005 à 18:53
Tu parles de quel EDI ? J'utilise SharpDevelop, et je n'ai pas trouvé l'option pour indenter le code...
cs_jmhC Messages postés 108 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 10 août 2007
21 juin 2005 à 18:18
Merci pour la source. Pour l'identaton, celle-ci est automatique dans les EDI.
Je vais consulter ce code, il m'interresse.
Je souhaite faire un prog pour aller voir sur plusieurs comptes l'éxitence des messages.

A+
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
21 juin 2005 à 14:37
Voila, je viens de mettre le code source a telecharger et il est même indenté. Elle est pas belle la vie ?
nah666 Messages postés 75 Date d'inscription samedi 30 août 2003 Statut Membre Dernière intervention 7 janvier 2008 1
21 juin 2005 à 09:47
Oh excuse moi pour cet affront :p
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
21 juin 2005 à 09:45
Attends, je sais ce que c'est d'indenter !!! Mais si je l'avais fait, ce n'etait pas plus lisible vu le nombre de blocs imbriqués !!!!
Ok, je mettrais la source, avec l'indentation
nah666 Messages postés 75 Date d'inscription samedi 30 août 2003 Statut Membre Dernière intervention 7 janvier 2008 1
21 juin 2005 à 08:25
Tu devrais indenter ton code (cad décaler en fonction des blocs 'if' ou 'try')

Ca rend le code NETTEMENT plus lisible.
cs_jmhC Messages postés 108 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 10 août 2007
20 juin 2005 à 20:38
Salut,

Tu aurais pu mettre le fichier au moins! Merci.
cs_AshenShugar Messages postés 202 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 22 janvier 2009 1
20 juin 2005 à 11:10
Ah oui, j'ai oublié de le signaler et je l'aurais du !!!! Je me suis inspiré du code de TheSaib poster sur ce même forum :

http://www.csharpfr.com/code.aspx?id=11467

Merci TheSaib
Rejoignez-nous