bonjour mmatuvu,
Tiens j'ai trouvé dans la faq vb6 sur free, à cette adresse :
http://faq.vb.free.fr/index.php?question=2
Amuse toi bien
Utilisation des sockets et implémentation des protocoles POP3, SMTP, etc.
La solution idéale, mais plus difficile à mettre en oeuvre, est d'utiliser Winsock (le contrôle ou l'API) et d'implémenter soi-même les protocoles POP3, IMAP et SMTP. On pourra ainsi envoyer des messages depuis un poste ne possèdant ni Office, ni Outlook Express, ni aucun autre logiciel de messagerie. Ces protocoles sont parfaitement décrits par des RFC, dont on trouvera la liste avec les liens hypertextes correspondants dans la section "Pour Aller plus loin" en fin d'article.
Le programme suivant est un exemple d'implémentation du protocole SMTP permettant d'envoyer des e-mails en employant le contrôle Winsock :
Option Explicit
Private Enum SMTPSessionState
SMTP_CONNECT
SMTP_HELO
SMTP_MAIL
SMTP_RCPT
SMTP_DATA
SMTP_SENDMESSAGE
SMTP_QUIT
End Enum
Private CurrentSMTPSessionState As SMTPSessionState
' Copies locales
Private lcSenderDisplayName As String
Private lcSenderAddress As String
Private lcRecipientDisplayName As String
Private lcRecipientAddress As String
Private lcSubject As String
Private lcMessage As String
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sServerResponse As String
Dim sDataToSend As String
Dim MessageLines() As String
Dim i As Long
' Récupère la réponse du serveur
Winsock1.GetData sServerResponse
If Left(sServerResponse, 1) "2" Or Left(sServerResponse, 1) "3" Then
Select Case CurrentSMTPSessionState
Case SMTP_CONNECT
CurrentSMTPSessionState = SMTP_HELO ' Change l'état de la session
' Récupère le nom de domaine
sDataToSend = Right(lcSenderAddress, Len(lcSenderAddress) - InStr(lcSenderAddress, "@"))
' Et envoie la commande HELO au serveur
sDataToSend = "HELO " & sDataToSend & vbCrLf
Winsock1.SendData sDataToSend
Case SMTP_HELO
CurrentSMTPSessionState = SMTP_MAIL ' Change l'état de la session
' Et envoie la commande MAIL au serveur
sDataToSend = "MAIL FROM:<" & lcSenderAddress & ">" & vbCrLf
Winsock1.SendData sDataToSend
Case SMTP_MAIL
CurrentSMTPSessionState = SMTP_RCPT ' Change l'état de la session
' Et envoie la commande RCPT au serveur
sDataToSend = "RCPT TO:<" & lcRecipientAddress & ">" & vbCrLf
Winsock1.SendData sDataToSend
Case SMTP_RCPT
CurrentSMTPSessionState = SMTP_DATA ' Change l'état de la session
' Et envoie la commande DATA au serveur
sDataToSend = "DATA" & vbCrLf
Winsock1.SendData sDataToSend
Case SMTP_DATA
CurrentSMTPSessionState = SMTP_SENDMESSAGE ' Change l'état de la session
' Envoie les en-têtes du message
Winsock1.SendData "Subject: " & lcSubject & vbLf
Winsock1.SendData "From: " & Chr(34) & lcSenderDisplayName & Chr(34) & " <" & lcSenderAddress & ">" & vbLf
Winsock1.SendData "To: " & Chr(34) & lcRecipientDisplayName & Chr(34) & " <" & lcRecipientAddress & ">" & vbLf
' Scinde le message en lignes
MessageLines = Split(lcMessage, vbCrLf)
' Envoie chaque ligne du message
For i = 0 To UBound(MessageLines)
sDataToSend = MessageLines(i)
If Left(sDataToSend, 1) = "." Then
sDataToSend = "." & sDataToSend
End If
Winsock1.SendData sDataToSend & vbLf
Next
' Envoie un point pour indiquer la fin de l'envoie des données
Winsock1.SendData vbCrLf & "." & vbCrLf
Case SMTP_SENDMESSAGE
CurrentSMTPSessionState = SMTP_QUIT ' Change l'état de la session
' Affichage d'un message de confirmation, à supprimer dans le code définitif
MsgBox "Le message envoyé avec succès.", vbInformation
' Et envoie la commande QUIT au serveur
Winsock1.SendData "QUIT" & vbCrLf
Case SMTP_QUIT
Winsock1.Close ' Ferme la connexion
End Select
Else
MsgBox "Erreur SMTP : " & sServerResponse, vbExclamation
CurrentSMTPSessionState = SMTP_QUIT
Winsock1.SendData "QUIT" & vbCrLf
End If
End Sub
Private Sub Winsock1_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 "Winsock Error number " & Number & " : " & Description, vbExclamation
Winsock1.Close
End Sub
Public Sub SendMail(ByVal SMTPServeur As String, _
ByVal SenderAddress As String, _
ByVal RecipientAddress As String, _
ByVal Subject As String, _
ByVal Message As String, _
Optional ByVal SenderDisplayName As String, _
Optional ByVal RecipientDisplayName As String)
lcSenderDisplayName = Trim(SenderDisplayName)
lcSenderAddress = Trim(SenderAddress)
lcRecipientDisplayName = Trim(RecipientDisplayName)
lcRecipientAddress = Trim(RecipientAddress)
lcSubject = Trim(Subject)
lcMessage = Trim(Message)
CurrentSMTPSessionState = SMTP_CONNECT
Winsock1.Connect Trim$(SMTPServeur), 25
End Sub
'
' Exemple D'utilisation
'
Private Sub Command1_Click()
Call SendMail("smtp.serveur.com", "jean.dubois@serveur.com", "john.smith@serveur.com", _
"Petit test", "Hello !", "Jean Dubois", "John Smith")
End Sub
Dommage que tu ne fasses pas en vbNet car c'est plus court !
Cordialement, Joe.