begin process at 2008 05 17 03:02:47
1 173 899 membres
32 nouveaux aujourd'hui
13 973 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE DE CONNEXION POP3 AVEC TÉLÉCHARGEMENT DES MESSAGES


Information sur la source

Catégorie :Réseau & Internet Source .NET ( DotNet ) Classé sous : pop3, mail, retr, email, eml Niveau : Débutant Date de création : 16/12/2005 Date de mise à jour : 16/12/2005 16:31:36 Vu : 8 365

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note


Description

Voici une classe de récupération de mails faite en Vb.NET 2005.

Il est possible d'enregistrer les messages au format eml.

Source

  • Imports System
  • Imports System.IO
  • Imports System.Net
  • Imports System.Data
  • Imports System.Net.Mail
  • Imports System.Collections
  • Imports System.Net.Sockets
  • ' class de connexion POP3
  • ' Téléchargement des messages
  • Public Class clsPOP3
  • #Region "Declarations privées"
  • Private co As TcpClient
  • Private ns As NetworkStream
  • Private sr As StreamReader
  • Private Server As String
  • Private ServerPort As Integer = 110
  • Private User As String
  • Private PWord As String
  • Private NbMails As Integer = 0
  • Private NetStrm As NetworkStream
  • Private RdStrm As StreamReader
  • #End Region
  • #Region "Properties Publiques"
  • ' Nom de l'utilisateur
  • Public Property UserName() As String
  • Get
  • Return User
  • End Get
  • Set(ByVal value As String)
  • User = value
  • End Set
  • End Property
  • ' Mot de passe
  • Public Property PassWord() As String
  • Get
  • Return PWord
  • End Get
  • Set(ByVal value As String)
  • PWord = value
  • End Set
  • End Property
  • ' Nom du serveur
  • Public Property ServerName() As String
  • Get
  • Return Server
  • End Get
  • Set(ByVal value As String)
  • Server = value
  • End Set
  • End Property
  • ' Numéro du port de connexion
  • Public Property ServerPortNumber() As Integer
  • Get
  • Return ServerPort
  • End Get
  • Set(ByVal value As Integer)
  • ServerPort = value
  • End Set
  • End Property
  • ' Obtient le nombre de mails
  • Public ReadOnly Property NumberOfMails() As Integer
  • Get
  • Return NbMails
  • End Get
  • End Property
  • #End Region
  • ' Evenement renvoyant les informations de connexion etc...
  • Public Event ConnectionStatus(ByVal message As String)
  • ' Reception des messages et sauvegarde
  • ' ou non dans un fichier
  • Public Function receiveMessage(ByVal messageIndex As Integer, ByRef messageStream As String, Optional ByVal saveFileName As String = "") As Boolean
  • Dim szTemp As String
  • Dim sOut As String
  • Dim message As String = ""
  • Try
  • sOut = "RETR " & messageIndex.ToString() & vbCrLf
  • SendStream(sOut)
  • szTemp = sr.ReadLine
  • RaiseEvent ConnectionStatus(szTemp)
  • Dim tempString As String = ""
  • If szTemp(0) <> "-" Then
  • While szTemp <> "."
  • tempString = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Convert(System.Text.Encoding.ASCII, System.Text.Encoding.UTF8, EncodeByte(szTemp)))
  • message = message & tempString & vbCrLf
  • szTemp = sr.ReadLine()
  • End While
  • End If
  • messageStream = message
  • ' Sauvegarde du mail
  • If saveFileName <> "" Then
  • Dim myFile As New System.IO.FileInfo(saveFileName)
  • Dim myTextWriter As System.IO.TextWriter
  • myTextWriter = myFile.CreateText()
  • myTextWriter.Write(messageStream)
  • myFile = Nothing
  • myTextWriter.Close()
  • myTextWriter.Dispose()
  • Return True
  • End If
  • Return True
  • Catch ex As Exception
  • RaiseEvent ConnectionStatus(ex.Message.ToString())
  • Return False
  • End Try
  • End Function
  • ' Supprime le message passé en paramètre
  • Public Function DeleteMessage(ByVal messageIndex As Integer) As Boolean
  • Dim data As String = "DELE " & messageIndex.ToString & vbCrLf
  • SendStream(data)
  • Dim tmpString As String = sr.ReadLine()
  • If tmpString.Substring(0, 4) = "-ERR" Then
  • MsgBox("Could Not Delete Message")
  • RaiseEvent ConnectionStatus("Le message " & messageIndex & " n'a pas été supprimé !")
  • Return False
  • Else
  • RaiseEvent ConnectionStatus("Le message " & messageIndex & " a été supprimé !")
  • Return True
  • End If
  • End Function
  • ' Connection à la boite
  • Public Function connect() As Boolean
  • NbMails = 0
  • Dim retServer As String
  • Try
  • ' Initialisation
  • co = New TcpClient(Server, ServerPort)
  • ns = co.GetStream()
  • sr = New StreamReader(co.GetStream())
  • 'sr.ReadLine()
  • Dim sOut As String = "USER " & User & vbCrLf
  • ' Envoi du login
  • SendStream(sOut)
  • retServer = sr.ReadLine
  • RaiseEvent ConnectionStatus(retServer)
  • ' Envoi du mot de passe
  • sOut = "PASS " & PWord & vbCrLf
  • SendStream(sOut)
  • retServer = sr.ReadLine
  • RaiseEvent ConnectionStatus(retServer)
  • If retServer.Substring(0, 4) <> "-ERR" Then
  • NbMails = RecupMsgInfo(1)
  • RaiseEvent ConnectionStatus("Nombre de mails: " & NbMails.ToString())
  • Return True
  • Else
  • RaiseEvent ConnectionStatus("Identification refusée !")
  • Return False
  • End If
  • Catch ex As Exception
  • RaiseEvent ConnectionStatus(ex.ToString())
  • Return False
  • End Try
  • End Function
  • ' Déconnexion
  • Public Function Disconnect() As Boolean
  • Dim sOut As String
  • Dim retString As String
  • sOut = "QUIT" & vbCrLf
  • SendStream(sOut)
  • Try
  • retString = sr.ReadLine()
  • RaiseEvent ConnectionStatus(retString)
  • Catch ex As Exception
  • RaiseEvent ConnectionStatus(ex.Message)
  • End Try
  • sr.Close()
  • ns.Close()
  • co.Close()
  • Return True
  • End Function
  • ' Envoi des commandes
  • Private Sub SendStream(ByVal s As String)
  • Dim FluxSortant() As Byte
  • FluxSortant = EncodeByte(s)
  • Try
  • ns.Write(FluxSortant, 0, FluxSortant.Length)
  • Catch ex As Exception
  • RaiseEvent ConnectionStatus(ex.Message)
  • End Try
  • End Sub
  • ' Encodage des commandes pour POP3
  • Private Function EncodeByte(ByVal s As String) As Byte()
  • Return System.Text.ASCIIEncoding.ASCII.GetBytes(s.ToCharArray())
  • End Function
  • ' Recupération du nombre de message
  • ' ou du corps des messages
  • Private Function RecupMsgInfo(ByVal iMode As Integer, ByVal ParamArray i() As Integer) As Integer
  • Dim FluxSortant As String = ""
  • Dim sTempLigne As String = "+OK "
  • Select Case iMode
  • Case 1
  • FluxSortant = "STAT" + vbCrLf
  • Case 2
  • FluxSortant = "LIST " + i(0).ToString() + "\r\n"
  • End Select
  • Dim sTemp As String() = {"0"}
  • Try
  • Do
  • SendStream(FluxSortant)
  • sTempLigne = sr.ReadLine()
  • RaiseEvent ConnectionStatus(sTempLigne)
  • sTemp = sTempLigne.Split(" ")
  • Loop While (sTempLigne = "+OK ")
  • Catch ex As SocketException
  • RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
  • Catch ex As ArgumentException
  • RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
  • End Try
  • Try
  • Dim iWordCount As Integer = 0
  • For iWordCount = 0 To sTemp.Length - 1
  • If IsNumeric(sTemp(iWordCount)) Then
  • Return Integer.Parse(sTemp(iWordCount))
  • End If
  • Next
  • Catch ex As Exception
  • RaiseEvent ConnectionStatus(ex.Message)
  • Return 0
  • End Try
  • End Function
  • End Class
Imports System
Imports System.IO
Imports System.Net
Imports System.Data
Imports System.Net.Mail
Imports System.Collections
Imports System.Net.Sockets


' class de connexion POP3
' Téléchargement des messages

Public Class clsPOP3

#Region "Declarations privées"
    Private co As TcpClient
    Private ns As NetworkStream
    Private sr As StreamReader

    Private Server As String
    Private ServerPort As Integer = 110
    Private User As String
    Private PWord As String

    Private NbMails As Integer = 0

    Private NetStrm As NetworkStream
    Private RdStrm As StreamReader
#End Region

#Region "Properties Publiques"

    ' Nom de l'utilisateur
    Public Property UserName() As String
        Get
            Return User
        End Get
        Set(ByVal value As String)
            User = value
        End Set
    End Property

    ' Mot de passe
    Public Property PassWord() As String
        Get
            Return PWord
        End Get
        Set(ByVal value As String)
            PWord = value
        End Set
    End Property

    ' Nom du serveur
    Public Property ServerName() As String
        Get
            Return Server
        End Get
        Set(ByVal value As String)
            Server = value
        End Set
    End Property

    ' Numéro du port de connexion
    Public Property ServerPortNumber() As Integer
        Get
            Return ServerPort
        End Get
        Set(ByVal value As Integer)
            ServerPort = value
        End Set
    End Property

    ' Obtient le nombre de mails
    Public ReadOnly Property NumberOfMails() As Integer
        Get
            Return NbMails
        End Get
    End Property
#End Region

    ' Evenement renvoyant les informations de connexion etc...
    Public Event ConnectionStatus(ByVal message As String)

    ' Reception des messages et sauvegarde
    ' ou non dans un fichier
    Public Function receiveMessage(ByVal messageIndex As Integer, ByRef messageStream As String, Optional ByVal saveFileName As String = "") As Boolean
        Dim szTemp As String
        Dim sOut As String
        Dim message As String = ""
        Try
            sOut = "RETR " & messageIndex.ToString() & vbCrLf
            SendStream(sOut)
            szTemp = sr.ReadLine

            RaiseEvent ConnectionStatus(szTemp)

            Dim tempString As String = ""
            If szTemp(0) <> "-" Then
                While szTemp <> "."
                    tempString = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Convert(System.Text.Encoding.ASCII, System.Text.Encoding.UTF8, EncodeByte(szTemp)))
                    message = message & tempString & vbCrLf
                    szTemp = sr.ReadLine()
                End While
            End If

            messageStream = message

            '  Sauvegarde du mail
            If saveFileName <> "" Then
                Dim myFile As New System.IO.FileInfo(saveFileName)
                Dim myTextWriter As System.IO.TextWriter

                myTextWriter = myFile.CreateText()
                myTextWriter.Write(messageStream)
                myFile = Nothing
                myTextWriter.Close()
                myTextWriter.Dispose()
                Return True
            End If

            Return True
        Catch ex As Exception
            RaiseEvent ConnectionStatus(ex.Message.ToString())
            Return False
        End Try


    End Function

    ' Supprime le message passé en paramètre
    Public Function DeleteMessage(ByVal messageIndex As Integer) As Boolean
        Dim data As String = "DELE " & messageIndex.ToString & vbCrLf

        SendStream(data)

        Dim tmpString As String = sr.ReadLine()
        If tmpString.Substring(0, 4) = "-ERR" Then
            MsgBox("Could Not Delete Message")
            RaiseEvent ConnectionStatus("Le message " & messageIndex & " n'a pas été supprimé !")
            Return False
        Else
            RaiseEvent ConnectionStatus("Le message " & messageIndex & " a été supprimé !")
            Return True
        End If
    End Function

    ' Connection à la boite
    Public Function connect() As Boolean

        NbMails = 0
        Dim retServer As String
        Try
            ' Initialisation
            co = New TcpClient(Server, ServerPort)
            ns = co.GetStream()
            sr = New StreamReader(co.GetStream())
            'sr.ReadLine()

            Dim sOut As String = "USER " & User & vbCrLf

            ' Envoi du login
            SendStream(sOut)
            retServer = sr.ReadLine
            RaiseEvent ConnectionStatus(retServer)

            ' Envoi du mot de passe
            sOut = "PASS " & PWord & vbCrLf
            SendStream(sOut)
            retServer = sr.ReadLine
            RaiseEvent ConnectionStatus(retServer)

            If retServer.Substring(0, 4) <> "-ERR" Then
                NbMails = RecupMsgInfo(1)
                RaiseEvent ConnectionStatus("Nombre de mails: " & NbMails.ToString())
                Return True
            Else
                RaiseEvent ConnectionStatus("Identification refusée !")
                Return False
            End If
        Catch ex As Exception
            RaiseEvent ConnectionStatus(ex.ToString())
            Return False
        End Try

        

    End Function

    ' Déconnexion
    Public Function Disconnect() As Boolean
        Dim sOut As String
        Dim retString As String

        sOut = "QUIT" & vbCrLf

        SendStream(sOut)
        Try
            retString = sr.ReadLine()
            RaiseEvent ConnectionStatus(retString)
        Catch ex As Exception
            RaiseEvent ConnectionStatus(ex.Message)
        End Try

        sr.Close()
        ns.Close()
        co.Close()
        Return True
    End Function

    ' Envoi des commandes
    Private Sub SendStream(ByVal s As String)
        Dim FluxSortant() As Byte
        FluxSortant = EncodeByte(s)
        Try
            ns.Write(FluxSortant, 0, FluxSortant.Length)
        Catch ex As Exception
            RaiseEvent ConnectionStatus(ex.Message)
        End Try
    End Sub

    ' Encodage des commandes pour POP3
    Private Function EncodeByte(ByVal s As String) As Byte()
        Return System.Text.ASCIIEncoding.ASCII.GetBytes(s.ToCharArray())
    End Function

    ' Recupération du nombre de message
    ' ou du corps des messages
    Private Function RecupMsgInfo(ByVal iMode As Integer, ByVal ParamArray i() As Integer) As Integer
        Dim FluxSortant As String = ""
        Dim sTempLigne As String = "+OK "


        Select Case iMode
            Case 1
                FluxSortant = "STAT" + vbCrLf
            Case 2
                FluxSortant = "LIST " + i(0).ToString() + "\r\n"
        End Select

        Dim sTemp As String() = {"0"}

        Try
            Do
                SendStream(FluxSortant)
                sTempLigne = sr.ReadLine()
                RaiseEvent ConnectionStatus(sTempLigne)

                sTemp = sTempLigne.Split(" ")

            Loop While (sTempLigne = "+OK ")
        Catch ex As SocketException
            RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
        Catch ex As ArgumentException
            RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
        End Try

        Try
            Dim iWordCount As Integer = 0
            For iWordCount = 0 To sTemp.Length - 1
                If IsNumeric(sTemp(iWordCount)) Then
                    Return Integer.Parse(sTemp(iWordCount))
                End If
            Next

        Catch ex As Exception
            RaiseEvent ConnectionStatus(ex.Message)
            Return 0
        End Try

    End Function


End Class
16 décembre 2005 16:31:36 :
Mise à jour de la fonction Connect(). Celle çi renvoyait True lorsque l'hôte "tait inconnu. "System.Net.Sockets.SocketException"
  • signaler à un administrateur
    Commentaire de OneHacker le 17/12/2005 14:09:02

    Pas grand monde à la FrameWork.2 pour pouvoir utiliser le code de vb2005, pourrais tu donner l'adresse de téléchargement de la framework 2. Merci

  • signaler à un administrateur
    Commentaire de casper le 19/12/2005 10:25:11

    Je penses que ce code fonctionne aussi en version 1.1 du framework. Mais voila quand même le lien pour le téléchargement:

    http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=7ABD8C8F-287E-4C7E-9A4A-A4ECFF40FC8E

    ou encore VB 2005 (Express):

    http://msdn.microsoft.com/vstudio/express/vb/

  • signaler à un administrateur
    Commentaire de nass932 le 02/02/2006 17:00:20

    J'ai testé en etant nul en VB.NET mais voila ce que cela donne chez moi :

    Imports System.Net.Mail
    L'espace de noms ou le type 'Mail' pour les Imports 'System.Net.Mail' est introuvable.


    myTextWriter.dispose()
    'System.IO.TextWriter.Protected Overridable Sub Dispose(disposing As Boolean)' n'est pas accessible dans ce contexte, car il est 'Protected'

  • signaler à un administrateur
    Commentaire de TroXsA le 06/02/2006 18:09:36

    Pas mal du tout, le code est assez propre mais pas assez commenté (avis perso), tres bon comme exemple ...

    merci

    @+

  • signaler à un administrateur
    Commentaire de mctyler le 24/04/2006 16:05:25

    Pas mal , merci.

    Par contre, j'suis unpeu novice et je voudrais savoir comment récupérer l'evenement "connectionStatus dans un textbox?

    merci

    Rank.

  • signaler à un administrateur
    Commentaire de panpanpan le 30/07/2006 15:31:59

    Super la fonction mais ce n'ait pas pour la france.
    écrivez téléphone dans le sujet et vous obtenez tlphone
    tous les accents sont suprimés la lettre avec.
    c'est une histoire d' encoding je pense, mais là je suis
    dépassé , apparament encoding assci ou utf8 c'est pas bon

    je suis sur qu'il y a 2 mots à changer pour que ce soit parfait.
    si qq à la solution? cette class est inexploitable sinon
    et c'est dommage car elle est bien écrite.

  • signaler à un administrateur
    Commentaire de vira19100 le 20/08/2006 11:35:04

    On s'en sert comment ?

  • signaler à un administrateur
    Commentaire de Le newbie le 28/11/2006 11:06:01

    Salut,
    Je n'ai pas encore regardé la source mais je suppose que tu as une ligne du style : Encoding.ASCIIEncoding.XXX

    alors remplace le ASCII par UTF8Encoding

    @++

  • signaler à un administrateur
    Commentaire de arnaud31 le 23/05/2007 18:53:58

    Coucou,

    Le code fonctionne correctement en vb.net 2003

    L'import de system.net.mail ne sert à rien

    Il faut modifier la ligne :
    If szTemp(0) <> "-" Then
    en :
    If Mid(szTemp,1,1) <> "-" Then

    La ligne : myTextWriter.dispose() doit être supprimée.

    Pour moi, le reste fonctionne (cnx, recup nb mail, lecture message, deconnexion).

    Il reste à regarder les accentués.


    En tout cas, bon boulot !!!

  • signaler à un administrateur
    Commentaire de arnaud31 le 23/05/2007 18:54:50

    Coucou,

    Le code fonctionne correctement en vb.net 2003

    L'import de system.net.mail ne sert à rien

    Il faut modifier la ligne :
    If szTemp(0) <> "-" Then
    en :
    If Mid(szTemp,1,1) <> "-" Then

    La ligne : myTextWriter.dispose() doit être supprimée.

    Pour moi, le reste fonctionne (cnx, recup nb mail, lecture message, deconnexion).

    Il reste à regarder les accentués.


    En tout cas, bon boulot !!!

  • signaler à un administrateur
    Commentaire de arnaud31 le 23/05/2007 18:55:47

    Coucou,

    Le code fonctionne correctement en vb.net 2003

    L'import de system.net.mail ne sert à rien

    Il faut modifier la ligne :
    If szTemp(0) <> "-" Then
    en :
    If Mid(szTemp,1,1) <> "-" Then

    La ligne : myTextWriter.dispose() doit être supprimée.

    Pour moi, le reste fonctionne (cnx, recup nb mail, lecture message, deconnexion).

    Il reste à regarder les accentués.


    En tout cas, bon boulot !!!

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS