- Ze Officiel Site Oueb-

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

Mis à jour le 22/10/2002

Par Sébastien Curutchet

L'envoi d'un mail Sommaire

Partie III : La réception d'e-mail:

Pour la réception nous allons contruire une nouvelle Form afin de lire les mails.


Ensuite vous devez coller sur votre Form le contrôle lui même :

Exemple avec le contrôle Winsock


Cette form se divise en deux parties. La partie du haut concernant la connexion :
- le champ login : txtLogin
- le champ mot de passe : txtPassword
- le champ serveur : txtServer
- le bouton de connexion : btnConnect
- le bouton de déconnexion : btnDisconnect

La partie du bas compte 3 champ :
- une listbox à droite : lstMessage dans laquelle apparaîtront la liste des messages
- une RichTextBox à droite : rtxtMessage dans laquelle vous verrez le contenu du message
- une RichTextBox en bas : rtxtLog qui correspond à la fenêtre de log comme por l'émission.

Le code que je fournis est des plus basiques. C'est juste pour montrer que l'utilisation des sockets est toujours la même chose. Le tout est de savoir ce que vous recevez et ce que vous devez envoyer. Pour cela je vous renvoie aux différentes RFC ou alors à votre propre cahier des charges si vous développez votre propre protocole de communication.


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. De plus vous verrez le mail au format brut, c'est à dire au format texte. Donc si vous recevez un mail HTML vous verrez les balises. Les entêtes du mail seront aussi affichés. Donc si vous souhaitez faire un joli client mail, vous devez traiter le contenu de rtxtMessage. Pour la suppression de mail et autre traitement sur le serveur distant je vous renvoie à la RFC 1939. Chercher sur Google et vous trouverez des documents en français sur cette RFC.

L'envoi d'un mail Sommaire

Pour nous contacter : Webmaster