Checkeur de mail (avec winsock) maj!!!

Description

Sert à vérifie si on a des messages dans sa BAL sans pour autant les télécharger
G fait le prog pas trop compliqué pour que ce soit facile d'accès et pour montrer un peu l'utilisation de winsock avec le protocole pop3, si ca marche pas prévenez moi

Maj03/02 Ajout progress bar + info sur taille + bug deco/reco fixé

Source / Exemple :


'   Checkeur de Mail
'   Il faut rentrer son serveur pop dans la constante SERVEUR juste en dessous
'   Pour ceux qui comprennent pas trop voilà un exemple:
'   consulter l'adresse rep@wanadoo.fr sachant que le mdp est prout
'   on met dans la variable SERVEUR : "pop.wanadoo.fr"
'   dans l'appli on met dans user: rep
'   et dans Mot de passe: prout
'   ensuite on appuie sur go
'
'   Mon but étant de montrer l'utilisation de winsock sur le protocole pop3
'   G pas poussé les capacités de l'appli mais rien ne vous en empeche ...

Private Type Info
    nb As String
    taille As String
End Type

Const SERVEUR = "" '<--------------------- Serveur par défaut

Dim étape As Integer
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Déclaration pour le checker-mail '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const CONNEX = 1
Const USER = 2
Const PASS = 3
Const STAT = 4

Private Sub B_GO_Click()
On Error Resume Next
Dim ret
    If Not Text1.Text = "" And Not Text2.Text = "" And Not Text3.Text = "" Then
        étape = CONNEX
        W.RemoteHost = Text3.Text
        W.Close
        DoEvents
        W.Connect
    Else
        ret = MsgBox("Vous devez remplir les 3 champs: [Serveur] [Login] et [Mot de passe]", vbCritical)
    End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then Text2.SetFocus
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then Call B_GO_Click
End Sub

Private Sub W_DataArrival(ByVal bytesTotal As Long)
    Dim ret
    Dim Temp As String
    Dim temp1 As Info
    W.GetData Temp, vbString
    If Mid(Temp, 1, 1) = "+" Then 'le debut d'un message d'accord, changer si ce n'est pas le K pour votre serveur
        Select Case étape
        Case CONNEX
            ProgressBar.Value = 10
            Envoyer ("USER " & Text1.Text)
            ProgressBar.Value = 20
        Case USER
            ProgressBar.Value = 30
            Envoyer ("PASS " & Text2.Text)
            ProgressBar.Value = 40
        Case PASS
            ProgressBar.Value = 50
            Envoyer ("STAT")
            ProgressBar.Value = 60
        Case STAT
            ProgressBar.Value = 70
            temp1 = Récupération(Temp)
            If Val(temp1.nb) > 0 Then
                ret = MsgBox(temp1.nb & " Nouveau(x) Message(s)  " & vbCrLf & "Pour :   " & temp1.taille, , "Alors? Combien?")
            Else
                ret = MsgBox("Désolé, pas de message", , "Snif")
            End If
            DoEvents
            Envoyer ("QUIT")
            'rien ne vous empeche d'appeller votre outlook suivant la réponse de la box...
        Case Else
        End Select
        étape = étape + 1
    Else
        ret = MsgBox("Erreur: " & Temp, vbOKCancel + vbCritical, "Arg")
        DoEvents
        Envoyer ("QUIT")
    End If
End Sub

Private Sub W_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
''''''''''''''''' Souvent C1 probleme de port
    Dim ret As Integer
    W.Close
    DoEvents
    ret = MsgBox(Description & vbCrLf & "On passe au port suivant?", vbCritical + vbOKCancel)
    If ret = vbOK Then
        W.Close
        W.LocalPort = W.LocalPort + 1
        étape = CONNEX
        W.Connect
    End If
    DoEvents
    ProgressBar.Value = 0.0001
End Sub

Function Envoyer(Temp As String)
'''''''''''''''''''' Le but est d'envoyer lettre par lettre
Dim i, max
max = Len(Temp)
For i = 1 To max Step 1
    W.SendData (Mid(Temp, i, 1))
Next i
W.SendData (vbCrLf)
End Function

Private Function Récupération(Temp As String) As Info
'''''''''''''''''''' Permet de récup le nbre de message
'''''''''''''''''''' Quand trouvé est vrai c'est qu'on a trouvé le premier espace
'''''''''''''''''''' Donc quand on trouve le 2eme on a délimité le nbre de message
    Dim lon, deb, i, tail
    Dim Reponse As Info
    Dim trouvé As Boolean
    trouvé = False
    lon = Len(Temp)
    For i = 1 To lon Step 1
    If Mid(Temp, i, 1) = " " Then
        If Not trouvé Then
            deb = i: trouvé = True
        ElseIf trouvé Then
''''''''''''''''''''' On a trouvé la fin et on renvoie la string comportant le nbre de msg
            Reponse.nb = Mid(Temp, deb, i - deb)
''''''''''''''''''''' Maintenant c'est la taille
''''''''''''''''''''' Important: La taille donnée est la taille du/des msg sur le serveurs
''''''''''''''''''''' ce qui ne correpond pas vraiment à la taille des pieces jointes sachant
''''''''''''''''''''' le msg sur le serveur contient des infos supplémentaire qui nous sont
''''''''''''''''''''' cachées par Outlook pour des raisons de lisibilité
''''''''''''''''''''' Pour résumer la taille affichée par la pop-up correspond à ce que vous avez
''''''''''''''''''''' besoin de télécharger pour réccup le msg
            tail = Val(Mid(Temp, i + 1, lon - i - 2) / 1024)
            Select Case tail
            Case 0 To 1024 'en K
                tail = Format(tail, "0.##")
                Reponse.taille = Str(tail) & " Ko"
            Case Is > 1024
                tail = Format(tail / 1024, "##0.00")
                Reponse.taille = Str(tail) & " Mo"
            End Select 'on prend pas en compte le cas ou c'est inférieur à 4 car c'est qu'il n'y a pas de msg et donc on affichera pas la taille
            Récupération = Reponse
            Exit Function
        End If
    End If
    Next i
End Function

Private Sub Form_Load()
    Text3.Text = SERVEUR
    ProgressBar.Value = 0.0001
    W.LocalPort = 669
    W.RemotePort = 110  'le port utilisé pour le protocole pop3, ne pas le changer
End Sub

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.