Client POP3

NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 15 août 2010 à 03:45
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 15 août 2010 à 18:26
Bonsoir!!
j'utilise la classe client_pop3 définie comme suit:
Imports System
Imports System.IO
Imports System.Net
Imports System.Data
Imports System.Net.Mail
Imports System.Collections
Imports System.Net.Sockets
Public Class clientpop3



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


#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



je veux tout simplement récupérer le nombre de mes mails(compte @live.fr),j'ai un bouton et un textbox:
code bouton:
 Dim a As clientpop3 = New clientpop3()
            Dim usr As String = "nsuadi@live.fr"
            Dim pwd As String 'mot de passe
            a.PassWord = pwd
            a.UserName = usr
            a.ServerName = "pop3.live.com" '  pop.mail.yahoo.fr
            a.ServerPortNumber = 110
            a.connect()
            TextBox1.Text = a.NumberOfMails()


il ne m'affiche pas le nombre des mails mais à chaque fois '0'...alors quel pourrait être le problème??
Merci d'avance!!

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0

2 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 août 2010 à 11:38
Salut
As tu essayé avec le debugger
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
15 août 2010 à 18:26
As tu essayé avec le debugger?


Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
Rejoignez-nous