- Ze Officiel Site Oueb-

fait par des personnes qui veulent se faire plaisir
- Visual Basic & Winsock -

Mis à jour le 31/09/2002

Par Sébastien Curutchet

Les contrôles nécessaires Sommaire La réception d'un mail via POP3

Partie II - L'envoi d'un mail :

La première chose à faire est de déclarer une variable permettant de capturer les évènements d'un contrôle Winsock.

Private WithEvents evt As Winsock

Afin de capturer l'ensemble des évènements du contrôle Winsock que vous avez collé sur la Form, il faut que les deux variables pointent sur le même objet.

Set evt = ws


Voici le code complet de la Form :

Private WithEvents evt As Winsock
Private nextSend As Boolean

Private Sub btnSend_Click()
Dim tmp As String

Set evt = ws

ws.Connect txtServer, 25
While ws.State <> sckConnected
DoEvents
Wend
nextSend = False
ws.SendData "HELO toto" & vbCrLf
While nextSend = False
DoEvents
Wend
nextSend = False
ws.SendData "MAIL FROM:" & txtFrom.Text & vbCrLf
While nextSend = False
DoEvents
Wend
nextSend = False
ws.SendData "RCPT TO:" & txtTo.Text & vbCrLf
While nextSend = False
DoEvents
Wend
nextSend = False
ws.SendData "DATA" & vbCrLf
While nextSend = False
DoEvents
Wend

ws.SendData "To:" & txtTo.Text & vbCrLf
ws.SendData "From:" & txtFrom.Text & vbCrLf
ws.SendData "Subject:" & txtSubject.Text & vbCrLf
ws.SendData rtxtMail.Text & vbCrLf
nextSend = False
ws.SendData vbCrLf & "." & vbCrLf
While nextSend = False
DoEvents
Wend


nextSend = False
ws.SendData "QUIT" & vbCrLf
While nextSend = False
DoEvents
Wend


ws.Close
End Sub

Private Sub evt_Close()
rtxtLog.Text = rtxtLog.Text & vbCrLf & "Deconnexion réalisée"
End Sub

Private Sub evt_Connect()
rtxtLog.Text = rtxtLog.Text & vbCrLf & "Connexion au serveur réalisée"
End Sub

Private Sub evt_ConnectionRequest(ByVal requestID As Long)
rtxtLog.Text = rtxtLog.Text & vbCrLf & "Demande de connexion au serveur"
End Sub

Private Sub evt_DataArrival(ByVal bytesTotal As Long)
Dim tmp As String

If ws.State = sckClosed Or ws.State = sckClosing Then Exit Sub
ws.GetData tmp, vbString, bytesTotal
rtxtLog.Text = txtLog.Text & Chr(13) & tmp
rtxtLog.Refresh
nextSend = True
End Sub

Private Sub evt_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)
MsgBox Number & " : " & Description
End Sub

Le code présent ci-dessus ne gère pas les erreurs.

Comme vous pouvez le contaster, plusieurs évènements sont gérés dont la connexion, la déconnexion, la réception de messages et la réception d'erreurs. Pour chaque envoi, la variable nextFalse est positionnée à False car le programme doit attendre que le serveur est répondu avant de d'envoyer la suite. Vous pouvez rencontrer deux types d'erreurs : les erreurs liées à la connexion donc c'est l'évènement Error qui vous permettra de les gérer, ou bien les erreurs retournées par le serveur si vous avez envoyé une mauvaise commande. Dans ce dernier cas, c'est dans l'évènement DataArrival qu'il faudra regarder la chaîne retournée par le serveur pour savoir si tout c'est bien passé.

Lorsque vous envoyez de grosses données deux évènements supplémentaires peuvent vous permettre de voir l'avancement : SendComplete qui prévient quand le transfert est terminé, et SendProgress qui permet de savoir le nombre d'octets envoyés.

Comme vous avez pû le constater, chaque instruction encoyée se termine par vbCrLf qui permet de dire au serveur que c'est la fin de l'instruction.

Les contrôles nécessaires Sommaire La réception d'un mail via POP3

Pour nous contacter : Webmaster