CLASSE POUR CONNEXION À UN SERVEUR POP3 ET CHARGER LES EMAILS
cs_AshenShugar
Messages postés202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 2009
-
20 juin 2005 à 11:10
cs_boucherf
Messages postés6Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention22 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.
cs_boucherf
Messages postés6Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention22 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és33Date d'inscriptionjeudi 2 juin 2005StatutMembreDerniè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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és1Date d'inscriptionmardi 15 mai 2007StatutMembreDerniè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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és53Date d'inscriptionmercredi 29 août 2007StatutMembreDernière intervention31 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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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.
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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDernière intervention 9 avril 2009 4 avril 2008 à 08:43
Merci beaucoup !
Je vais faire ça desuite ! ;)
cs_AshenShugar
Messages postés202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és32Date d'inscriptionvendredi 2 février 2007StatutMembreDerniè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és2Date d'inscriptionlundi 19 septembre 2005StatutMembreDernière intervention17 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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 24 juin 2005 à 20:28
Cool, merci beaucoup ! Et dire que je me suis enquiquiné à tout indenter à la main !!! :D
cs_jmhC
Messages postés108Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention10 août 2007 22 juin 2005 à 18:17
je rectifie "indenter" au lieu de "identer"!
cs_jmhC
Messages postés108Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention10 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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és108Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention10 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és202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és75Date d'inscriptionsamedi 30 août 2003StatutMembreDernière intervention 7 janvier 20081 21 juin 2005 à 09:47
Oh excuse moi pour cet affront :p
cs_AshenShugar
Messages postés202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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és75Date d'inscriptionsamedi 30 août 2003StatutMembreDernière intervention 7 janvier 20081 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és108Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention10 août 2007 20 juin 2005 à 20:38
Salut,
Tu aurais pu mettre le fichier au moins! Merci.
cs_AshenShugar
Messages postés202Date d'inscriptionjeudi 24 juin 2004StatutMembreDernière intervention22 janvier 20091 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 :
21 mars 2009 à 20:39
24 févr. 2009 à 17:32
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
4 juil. 2008 à 20:00
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
4 juil. 2008 à 10:52
9 mai 2008 à 22:19
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.
9 mai 2008 à 17:59
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.
7 avril 2008 à 20:03
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.
7 avril 2008 à 16:13
7 avril 2008 à 14:40
TcpClient(this.Server, portPop);
Il manquait le nom du serveur, le port était bien récupéré !
7 avril 2008 à 14:11
6 avril 2008 à 10:11
N'y aurait-il pas un firewall ou quelque chose qui l'empeche de se connecter sur le port donné ?
5 avril 2008 à 17:53
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.
5 avril 2008 à 16:16
5 avril 2008 à 16:05
system.net.sockets.TcpClient..ctor(string hostname, int32 port)
à Messagerie.PopMailsCollectios.Connection()
4 avril 2008 à 19:02
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);
}
}
4 avril 2008 à 11:35
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);
}
4 avril 2008 à 10:18
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.
4 avril 2008 à 09:00
4 avril 2008 à 08:43
Je vais faire ça desuite ! ;)
3 avril 2008 à 22:45
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.
3 avril 2008 à 21:46
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
17 févr. 2006 à 14:02
une idée ??
24 juin 2005 à 20:28
22 juin 2005 à 18:17
21 juin 2005 à 21:42
menu contextuel => Clic-droit => identer ou ctrl+i
A+
21 juin 2005 à 18:53
21 juin 2005 à 18:18
Je vais consulter ce code, il m'interresse.
Je souhaite faire un prog pour aller voir sur plusieurs comptes l'éxitence des messages.
A+
21 juin 2005 à 14:37
21 juin 2005 à 09:47
21 juin 2005 à 09:45
Ok, je mettrais la source, avec l'indentation
21 juin 2005 à 08:25
Ca rend le code NETTEMENT plus lisible.
20 juin 2005 à 20:38
Tu aurais pu mettre le fichier au moins! Merci.
20 juin 2005 à 11:10
http://www.csharpfr.com/code.aspx?id=11467
Merci TheSaib