begin process at 2010 02 10 12:41:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > CLASSE POUR CONNEXION À UN SERVEUR POP3 ET CHARGER LES EMAILS

CLASSE POUR CONNEXION À UN SERVEUR POP3 ET CHARGER LES EMAILS


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Source .NET ( DotNet ) Classé sous :pop, email Niveau :Débutant Date de création :20/06/2005 Date de mise à jour :21/06/2005 14:36:05 Vu / téléchargé :11 539 / 821

Auteur : AshenShugar

Ecrire un message privé
Commentaire sur cette source (33)
Ajouter un commentaire et/ou une note

 Description

Voici une classe qui permet de se connecter à un serveur POP3 défini par l'utilisateur. Cette classe va charger les e-mails en attente sur le serveur ainsi que les pièces jointes. Bon, il n'est pas parfait, mais comme j'ai vu qu'il y avait pas mal de post sur le forum au sujet de la réception des mails, j'espère que ce début pourra vous aider. Je vous invite d'ailleurs à le modifier selon vos besoins...

Source

  • using System;
  • using System.IO;
  • using System.Web.Mail;
  • using System.Collections;
  • using System.Windows.Forms;
  • using System.Net.Sockets;
  • namespace PopMail
  • {
  • public class PopMailsCollections
  • {
  • private System.Net.Sockets.TcpClient co;
  • private System.Net.Sockets.NetworkStream ns;
  • private System.IO.StreamReader sr;
  • private string Server;
  • private string User;
  • private string PassWord;
  • public PopMail [] MailCollections;
  • public PopMailsCollections(string ServerName, string UserName, string PassWord)
  • {
  • this.Server = ServerName;
  • this.User = UserName;
  • this.PassWord = PassWord;
  • this.Connection();
  • }
  • public PopMail GetMail(int i)
  • {
  • return MailCollections[i];
  • }
  • public int Count()
  • {
  • return this.MailCollections.Length;
  • }
  • private void Connection()
  • {
  • int NbMail = 0;
  • string sOut = "user " + this.User + "\r\n";
  • try
  • {
  • co = new TcpClient(this.Server ,110);
  • 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)
  • {
  • MessageBox.Show("Erreur lors de la connexion au serveur.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • this.sr.Close();
  • this.ns.Close();
  • this.co.Close();
  • }
  • private void SendStream(string s)
  • {
  • byte[] FluxSortant;
  • ns.Write(FluxSortant=EncodeByte(s),0,FluxSortant.Length);
  • }
  • private byte[] EncodeByte(string s)
  • {
  • return System.Text.ASCIIEncoding.ASCII.GetBytes(s);
  • }
  • private int RecupMsgInfo(int iMode, params int[] i)
  • {
  • string FluxSortant = "";
  • string sTempLigne = "+OK ";
  • switch(iMode)
  • {
  • case 1:
  • FluxSortant="stat\r\n";
  • break;
  • case 2:
  • FluxSortant="list " + i[0].ToString() +"\r\n";
  • break;
  • }
  • string[] sTemp={"0"};
  • try
  • {
  • do
  • {
  • SendStream(FluxSortant);
  • sTempLigne = sr.ReadLine();
  • sTemp = sTempLigne.Split(' ');
  • } while((sTempLigne == "+OK "));
  • }
  • catch(SocketException e)
  • {
  • MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • catch(ArgumentNullException e)
  • {
  • MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • try
  • {
  • return int.Parse(sTemp[1]);
  • }
  • catch
  • {
  • return 0;
  • }
  • }
  • private void RecevoirMessage(int Nombre)
  • {
  • try
  • {
  • for(int i = Nombre; i>0; i--)
  • {
  • int iTailleMsg = RecupMsgInfo(2, i);
  • SendStream("retr " + i.ToString() + "\r\n");
  • this.InfoParMail(iTailleMsg, i-1);
  • }
  • }
  • catch(SocketException e)
  • {
  • MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • catch(ArgumentNullException e)
  • {
  • MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • }
  • private void InfoParMail(int iTaille, int IdMessage)
  • {
  • string BodyString;
  • BodyMessage BodyTemp = new BodyMessage();
  • Attachements CurrentFile;
  • PopMail CurrentMail = new PopMail(IdMessage);
  • CurrentMail.Size = iTaille;
  • bool Base64Code = false;
  • string FileName="";
  • ArrayList FileCode = new ArrayList();
  • string sTemp = sr.ReadLine();
  • string sTemp2;
  • string sTemp3;
  • try
  • {
  • if(sTemp != "-")
  • {
  • sTemp = sr.ReadLine();
  • while(sTemp != ".")
  • {
  • if(sTemp.Length != 0)
  • {
  • if(sTemp.Length >= 3)
  • {
  • if(sTemp.Substring(0, 3) == "To:")
  • CurrentMail.To = sTemp.Substring(3,sTemp.Length-3);
  • if(sTemp.Substring(0, 3) == "Cc:")
  • CurrentMail.Cc = sTemp.Substring(3,sTemp.Length-3);
  • }
  • if(sTemp.Length >= 5)
  • {
  • if(sTemp.Substring(0, 5) == "From:")
  • CurrentMail.From = sTemp.Substring(5,sTemp.Length-5);
  • if(sTemp.Substring(0, 5) == "Date:")
  • CurrentMail.Date = sTemp.Substring(5,sTemp.Length-5);
  • }
  • if(sTemp.Length >= 8)
  • {
  • if(sTemp.Substring(0, 8) == "Subject:")
  • CurrentMail.Subject = sTemp.Substring(8,sTemp.Length-8);
  • }
  • if(sTemp.IndexOf("Content-Type:") != -1)
  • {
  • sr.ReadLine();
  • if((sTemp2 = sr.ReadLine()).IndexOf("Content-Transfer-Encoding:") != -1)
  • {
  • sTemp3 = sr.ReadLine();
  • if(sTemp3 == "")
  • {
  • BodyString = "";
  • if(sTemp.Substring(13,sTemp.Length-13) == "text/plain;")
  • BodyTemp.BodyFormat = System.Web.Mail.MailFormat.Text;
  • else if(sTemp.Substring(13,sTemp.Length-13) == "text/html;")
  • BodyTemp.BodyFormat = System.Web.Mail.MailFormat.Html;
  • while((sTemp2 = sr.ReadLine()).IndexOf("------=_NextPart") == -1)
  • {
  • BodyString += sTemp2 + "\n";
  • }
  • BodyTemp.Body = BodyString;
  • CurrentMail.Bodies.Add(BodyTemp);
  • }
  • else if(sTemp3 == "Content-Disposition: attachment;")
  • {
  • if(sTemp2.Substring(27, sTemp2.Length - 27) == "quoted-printable")
  • {
  • Base64Code = false;
  • }
  • else if(sTemp2.Substring(27, sTemp2.Length-27) == "base64")
  • {
  • Base64Code = true;
  • }
  • sTemp = sr.ReadLine();
  • FileName = sTemp.Substring(13, sTemp.Length - 14);
  • sr.ReadLine();
  • while((sTemp = sr.ReadLine()) != "")
  • FileCode.Add(sTemp);
  • CurrentFile = new Attachements(FileName, FileCode, Base64Code);
  • CurrentMail.Enjoigned.Add(CurrentFile);
  • }
  • }
  • }
  • }
  • sTemp = sr.ReadLine();
  • }
  • this.MailCollections[IdMessage] = CurrentMail;
  • }
  • }
  • catch(SocketException e)
  • {
  • MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • catch(ArgumentNullException e)
  • {
  • MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
  • }
  • }
  • }
  • public class PopMail
  • {
  • private int IdMail;
  • public ArrayList Bodies;
  • public string Cc;
  • public string Date;
  • public string From;
  • public int Size;
  • public string Subject;
  • public string To;
  • public ArrayList Enjoigned;
  • public PopMail(int ID)
  • {
  • this.Bodies = new ArrayList();
  • this.Enjoigned = new ArrayList();
  • this.IdMail = ID;
  • }
  • public PopMail()
  • {}
  • }
  • public class Attachements
  • {
  • private string FileName;
  • private System.Collections.ArrayList CodeFile;
  • private bool Base64Coding;
  • private System.Windows.Forms.SaveFileDialog SaveDialog;
  • /// <summary>
  • /// public Attachements(string FileName, ArrayList Code, bool Base64)
  • /// </summary>
  • public Attachements(string FileName, ArrayList Code, bool Base64)
  • {
  • this.CodeFile = Code;
  • this.FileName = FileName;
  • this.Base64Coding = Base64;
  • this.SaveDialog = new System.Windows.Forms.SaveFileDialog();
  • this.SaveDialog.FileOk += new System.ComponentModel.CancelEventHandler(this.SaveDialogOk);
  • this.SaveDialog.FileName = this.FileName;
  • }
  • public void SaveFile()
  • {
  • this.SaveDialog.ShowDialog();
  • }
  • private void Base64Decode(string sChemin)
  • {
  • try
  • {
  • FileStream fFichier = new FileStream(sChemin, FileMode.CreateNew);
  • BinaryWriter w = new BinaryWriter(fFichier);
  • for(int i=0; i < this.CodeFile.Count; i++)
  • w.Write(System.Convert.FromBase64String(this.CodeFile[i].ToString()));
  • w.Close();
  • fFichier.Close();
  • }
  • catch
  • {
  • if(MessageBox.Show("Une erreur s'est produite lors de l'enregistrement de la pièce jointe.", "Erreur d'enregistrement", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
  • this.Base64Decode(sChemin);
  • }
  • }
  • void SaveDialogOk(object sender, System.ComponentModel.CancelEventArgs e)
  • {
  • if(this.Base64Coding)
  • this.Base64Decode(this.SaveDialog.FileName);
  • else
  • {
  • try
  • {
  • FileStream fFichier = new FileStream(this.SaveDialog.FileName, FileMode.CreateNew);
  • BinaryWriter w = new BinaryWriter(fFichier);
  • for(int i=0; i < this.CodeFile.Count; i++)
  • w.Write(System.Convert.FromBase64String(this.CodeFile[i].ToString()));
  • w.Close();
  • fFichier.Close();
  • }
  • catch
  • {
  • if(MessageBox.Show("Une erreur s'est produite lors de l'enregistrement de la pièce jointe.", "Erreur d'enregistrement", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
  • this.SaveDialogOk(sender, e);
  • }
  • }
  • }
  • public string GetName()
  • {
  • return this.FileName;
  • }
  • }
  • public struct BodyMessage
  • {
  • public string Body;
  • public System.Web.Mail.MailFormat BodyFormat;
  • };
  • }
using System;
using System.IO;
using System.Web.Mail;
using System.Collections;
using System.Windows.Forms;
using System.Net.Sockets;



namespace PopMail
{

public class PopMailsCollections
{
private System.Net.Sockets.TcpClient co;
private System.Net.Sockets.NetworkStream ns;
private System.IO.StreamReader sr;
private string Server;
private string User;
private string PassWord;
public PopMail [] MailCollections;

public PopMailsCollections(string ServerName, string UserName, string PassWord)
{
this.Server = ServerName;
this.User = UserName;
this.PassWord = PassWord;
this.Connection();
}

public PopMail GetMail(int i)
{
return MailCollections[i];
}

public int Count()
{
return this.MailCollections.Length;
}

private void Connection()
{

int NbMail = 0;
string sOut = "user " + this.User + "\r\n";

try
{
co = new TcpClient(this.Server ,110);
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) 
{
MessageBox.Show("Erreur lors de la connexion au serveur.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
this.sr.Close();
this.ns.Close();
this.co.Close();
}

private void SendStream(string s)
{
byte[] FluxSortant;
ns.Write(FluxSortant=EncodeByte(s),0,FluxSortant.Length);
}

private byte[] EncodeByte(string s)
{
return System.Text.ASCIIEncoding.ASCII.GetBytes(s);
}

private int RecupMsgInfo(int iMode, params int[] i)
{
string FluxSortant = "";
string sTempLigne = "+OK ";

switch(iMode)
{
case 1:
FluxSortant="stat\r\n";
break;

case 2:
FluxSortant="list " + i[0].ToString() +"\r\n";
break;
}

string[] sTemp={"0"};
try
{
do
{
SendStream(FluxSortant);
sTempLigne = sr.ReadLine();
sTemp = sTempLigne.Split(' ');
} while((sTempLigne == "+OK "));
}
catch(SocketException e) 
{
MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch(ArgumentNullException e)
{
MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

try
{
return int.Parse(sTemp[1]);
}
catch
{
return 0;
}
}

private void RecevoirMessage(int Nombre)
{
try
{
for(int i = Nombre; i>0; i--)
{
int iTailleMsg = RecupMsgInfo(2, i);
SendStream("retr " + i.ToString() + "\r\n");
this.InfoParMail(iTailleMsg, i-1);
}
}
catch(SocketException e) 
{
MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch(ArgumentNullException e)
{
MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void InfoParMail(int iTaille, int IdMessage)
{
string BodyString;
BodyMessage BodyTemp = new BodyMessage();
Attachements CurrentFile;
PopMail CurrentMail = new PopMail(IdMessage);
CurrentMail.Size = iTaille;
bool Base64Code = false;
string FileName="";
ArrayList FileCode = new ArrayList();
string sTemp = sr.ReadLine();
string sTemp2;
string sTemp3;
try
{
if(sTemp != "-")
{
sTemp = sr.ReadLine();

while(sTemp != ".")
{
if(sTemp.Length != 0)
{
if(sTemp.Length >= 3)
{
if(sTemp.Substring(0, 3) ==  "To:")
CurrentMail.To = sTemp.Substring(3,sTemp.Length-3);
if(sTemp.Substring(0, 3) ==  "Cc:")
CurrentMail.Cc = sTemp.Substring(3,sTemp.Length-3);
}
if(sTemp.Length >= 5)
{
if(sTemp.Substring(0, 5) == "From:")
CurrentMail.From = sTemp.Substring(5,sTemp.Length-5);
if(sTemp.Substring(0, 5) == "Date:")
CurrentMail.Date = sTemp.Substring(5,sTemp.Length-5);
}
if(sTemp.Length >= 8)
{
if(sTemp.Substring(0, 8) ==  "Subject:")
CurrentMail.Subject = sTemp.Substring(8,sTemp.Length-8);
}
if(sTemp.IndexOf("Content-Type:") != -1) 
{
sr.ReadLine();
if((sTemp2 = sr.ReadLine()).IndexOf("Content-Transfer-Encoding:") != -1)
{
sTemp3 = sr.ReadLine();
if(sTemp3 == "")
{
BodyString = "";
if(sTemp.Substring(13,sTemp.Length-13) == "text/plain;")
BodyTemp.BodyFormat = System.Web.Mail.MailFormat.Text;
else if(sTemp.Substring(13,sTemp.Length-13) == "text/html;")
BodyTemp.BodyFormat = System.Web.Mail.MailFormat.Html;

while((sTemp2 = sr.ReadLine()).IndexOf("------=_NextPart") == -1)
{
BodyString += sTemp2 + "\n";
}
BodyTemp.Body = BodyString;
CurrentMail.Bodies.Add(BodyTemp);
}
else if(sTemp3 == "Content-Disposition: attachment;")
{
if(sTemp2.Substring(27, sTemp2.Length - 27) == "quoted-printable")
{
Base64Code = false;
}
else if(sTemp2.Substring(27, sTemp2.Length-27) == "base64")
{
Base64Code = true;
}
sTemp = sr.ReadLine();
FileName = sTemp.Substring(13, sTemp.Length - 14);

sr.ReadLine();
while((sTemp = sr.ReadLine()) != "")
FileCode.Add(sTemp);
CurrentFile = new Attachements(FileName, FileCode, Base64Code);
CurrentMail.Enjoigned.Add(CurrentFile);
}
}
}
}
sTemp = sr.ReadLine();
}
this.MailCollections[IdMessage] = CurrentMail;
}
}
catch(SocketException e) 
{
MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch(ArgumentNullException e)
{
MessageBox.Show("Erreur lors du chargement des messages.\n"+ e.ToString(), "Erreur de connexion", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}


}

public class PopMail
{
private int IdMail;
public ArrayList Bodies;
public string Cc;
public string Date;
public string From;
public int Size;
public string Subject;
public string To;
public ArrayList Enjoigned;

public PopMail(int ID)
{
this.Bodies = new ArrayList();
this.Enjoigned = new ArrayList();
this.IdMail = ID;
}

public PopMail()
{}

}

public class Attachements
{
private string FileName;
private System.Collections.ArrayList CodeFile;
private bool Base64Coding;
private System.Windows.Forms.SaveFileDialog SaveDialog;
/// <summary>
/// public Attachements(string FileName, ArrayList Code, bool Base64)
/// </summary>
public Attachements(string FileName, ArrayList Code, bool Base64)
{
this.CodeFile = Code;
this.FileName = FileName;
this.Base64Coding = Base64;
this.SaveDialog = new System.Windows.Forms.SaveFileDialog();
this.SaveDialog.FileOk += new System.ComponentModel.CancelEventHandler(this.SaveDialogOk);
this.SaveDialog.FileName = this.FileName;
}

public void SaveFile()
{
this.SaveDialog.ShowDialog();
}

private void Base64Decode(string sChemin)
{
try
{
FileStream fFichier = new FileStream(sChemin, FileMode.CreateNew);
BinaryWriter w = new BinaryWriter(fFichier);
for(int i=0; i < this.CodeFile.Count; i++)
w.Write(System.Convert.FromBase64String(this.CodeFile[i].ToString()));
w.Close();
fFichier.Close();
}
catch
{
if(MessageBox.Show("Une erreur s'est produite lors de l'enregistrement de la pièce jointe.", "Erreur d'enregistrement", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
this.Base64Decode(sChemin);
}
}		


void SaveDialogOk(object sender, System.ComponentModel.CancelEventArgs e)
{
if(this.Base64Coding)
this.Base64Decode(this.SaveDialog.FileName);
else
{
try
{
FileStream fFichier = new FileStream(this.SaveDialog.FileName, FileMode.CreateNew);
BinaryWriter w = new BinaryWriter(fFichier);
for(int i=0; i < this.CodeFile.Count; i++)
w.Write(System.Convert.FromBase64String(this.CodeFile[i].ToString()));
w.Close();
fFichier.Close();
}
catch
{
if(MessageBox.Show("Une erreur s'est produite lors de l'enregistrement de la pièce jointe.", "Erreur d'enregistrement", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
this.SaveDialogOk(sender, e);
}
}
}

public string GetName()
{
return this.FileName;
}

}

public struct BodyMessage
{
public string Body;
public System.Web.Mail.MailFormat BodyFormat;		
};




}

 Conclusion

Euh... Je crois qu'il y a un petit bug au niveau du corps du message. Je m'en occupe rapidement et je mets ceci a jour.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

20 juin 2005 13:35:41 :
J'avais oublié de cocher la case .NET
21 juin 2005 14:36:05 :
Comme cela me fut demander, voici un zip du code source.

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) OUTIL D'ADMINISTRATION DE MYSQL
Source .NET (Dotnet) EDITEUR DE BATCH POUR LOTS DE REQUETES SQL POUR MYSQL

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) HTTP FLOOD STRESS TEST par NightMareLmW
Source avec Zip Source avec une capture Source .NET (Dotnet) SERVEUR/ESCLAVE MODBUS TCP/IP par SteveFuchsIT
Source avec Zip Source avec une capture Source .NET (Dotnet) IPHELPER - PORTS TCP/UDP, TABLES DE ROUTAGE/ARP + FONCTIONS ... par Willi
Source avec Zip Source avec une capture Source .NET (Dotnet) [.NET3.5] SYSTEM.IO.PIPES - UTILISATION D'UN CANAL NOMMÉ par Willi
Source avec Zip Source .NET (Dotnet) MESSAGES PERSOS MSN par XelectroX

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOYER UN EMAIL MULTIDESTINATAIRE EN SMTP AVEC ACCUSÉ DE LE... par Nikachu
Source avec Zip Source avec une capture Source .NET (Dotnet) SCRUTER UNE PAGE WEB À LA RECHERCHE DES LIENS ET DES ADRESSE... par developper_man
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOI EMAIL LISTE CONTACTS + GESTION DE CETTE LISTE EN XML par romagny13
Source avec Zip Source avec une capture Source .NET (Dotnet) RECUPERATION DE PIECES JOINTES D'UN SERVEUR POP par rokma950
Source .NET (Dotnet) EMAIL AVEC ACCUSÉ DE RÉCEPTION par fdouieb

Commentaires et avis

Commentaire de AshenShugar le 20/06/2005 11:10: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

Commentaire de jmhC le 20/06/2005 20:38:06

Salut,

Tu aurais pu mettre le fichier au moins! Merci.

Commentaire de nah666 le 21/06/2005 08:25:59

Tu devrais indenter ton code (cad décaler en fonction des blocs 'if' ou 'try')

Ca rend le code NETTEMENT plus lisible.

Commentaire de AshenShugar le 21/06/2005 09:45:07

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

Commentaire de nah666 le 21/06/2005 09:47:35

Oh excuse moi pour cet affront :p

Commentaire de AshenShugar le 21/06/2005 14:37:03

Voila, je viens de mettre le code source a telecharger et il est même indenté. Elle est pas belle la vie ?

Commentaire de jmhC le 21/06/2005 18:18:41

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+

Commentaire de AshenShugar le 21/06/2005 18:53:30

Tu parles de quel EDI ? J'utilise SharpDevelop, et je n'ai pas trouvé l'option pour indenter le code...

Commentaire de jmhC le 21/06/2005 21:42:58

J'utilise également SD.
menu contextuel => Clic-droit => identer ou ctrl+i
A+

Commentaire de jmhC le 22/06/2005 18:17:59

je rectifie "indenter" au lieu de "identer"!

Commentaire de AshenShugar le 24/06/2005 20:28:04

Cool, merci beaucoup ! Et dire que je me suis enquiquiné à tout indenter à la main !!! :D

Commentaire de MISMAQC le 17/02/2006 14:02:40

Chez moi, ça ne récupère ni le body, ni les pièces jointes !!!
une idée ??

Commentaire de Tartuffe245 le 03/04/2008 21:46:52

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

Commentaire de AshenShugar le 03/04/2008 22:45:49

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.

Commentaire de Tartuffe245 le 04/04/2008 08:43:07

Merci beaucoup !
Je vais faire ça desuite ! ;)

Commentaire de Tartuffe245 le 04/04/2008 09:00:17

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...

Commentaire de AshenShugar le 04/04/2008 10:18:47

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.

Commentaire de Tartuffe245 le 04/04/2008 11:35:31

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);
        }

Commentaire de AshenShugar le 04/04/2008 19:02:03

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);
    }
}

Commentaire de Tartuffe245 le 05/04/2008 16:05:43

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()

Commentaire de Tartuffe245 le 05/04/2008 16:16:38

il y aurait une erreur à la ligne 53 dans la classe popMail

Commentaire de Tartuffe245 le 05/04/2008 17:53:35

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.

Commentaire de AshenShugar le 06/04/2008 10:11:07

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é ?

Commentaire de Tartuffe245 le 07/04/2008 14:11:25

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.

Commentaire de Tartuffe245 le 07/04/2008 14:40:16

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é !

Commentaire de Tartuffe245 le 07/04/2008 16:13:16

Par contre pour récupérer le contenu du message, dois-je faire appel à la méthode private void InfoParMail(int iTaille, int IdMessage) ?

Commentaire de AshenShugar le 07/04/2008 20:03:27

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.

Commentaire de Cipoli le 09/05/2008 17:59:22

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.

Commentaire de AshenShugar le 09/05/2008 22:19:29

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.

Commentaire de gregfriends le 04/07/2008 10:52:31

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 ?

Commentaire de AshenShugar le 04/07/2008 20:00:54

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

Commentaire de chinois0013 le 24/02/2009 17:32:30

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

Commentaire de boucherf le 21/03/2009 20:39:09

j'ai pas comprendre comment recuperer les fichiers  joindre  quelqu'un peut m'aider si urgent  pls voila ma boit boucherfkhaled@gmail.com  

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

recuperer des email par des socket pop [ par samiarima ] bonjour je suis debutant en ce qui concerne csharp dotnet et mon probl&#232;me est que je dois&nbsp;programmer des socket pop pour recuperer messages& Envoi d'un mail avec pièce jointe [ par Flashy Warrior ] Bonjour, j'utilise System.Web.Mail pour envoyer des mails avec pièce jointe. Seul petit problème : quand la pièce jointe pèse plus de 125 ko (approxi pb de base de données avec le caractère @ [ par siadlamri ] bonjour tout le monde, en fait j'ai un probl&#232;me dans mon application C# qui essai d'inserer une ligne &#224; une table d'une&nbsp; base de donn& bug suppression mail pop [ par littlebigfox ] Bonjour a tous!&nbsp; J'ai un enorme souci concernant un checker de mail que je me suis fait sur les differents modeles presents sur code source: je r [c#] comment et ou utiliser les pop menu et info bulle [ par moha_yougo ] &nbsp;&nbsp;&nbsp; comment et ou utiliser les pop menu et info bulle donner moi un examplemerci recuperation email compte outlook [ par citt ] Bonjour,Je voudrait pouvoir recuperer l'adresse email du compte par defaut d'outlook.Est-ce possible ?Citt_jrBats toi avec les meilleurs, cr&#232;ve a Accéder à un serveur POP en .net 1.1 ? [ par Le_proprio_de_mykeyes ] J'ai cherché pour trouver de l'information sur la possibilité d'accéder à un serveur POP, mais tout ce que j'ai trouvé c'est une DLL payante faisant t info pour réponse d'un email automatique [ par mattiussi ] bonjours en faite j'aimerai que dans mon aplic j'ai une forme ou ont doit remplire (nom,adresse,email,etc..) j'aimerai que quand il pousse sur la touc


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,513 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales