1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
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, ByVal Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, ByVal 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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call SendMail("smtp.serveur.com", "jean.dubois@serveur.com", "john.smith@serveur.com", _
"Petit test", "Hello !", "Jean Dubois", "John Smith")
End Sub
End Class |
Partager