- Imports System
- Imports System.IO
- Imports System.Net
- Imports System.Data
- Imports System.Net.Mail
- Imports System.Collections
- Imports System.Net.Sockets
-
-
- ' class de connexion POP3
- ' Téléchargement des messages
-
- Public Class clsPOP3
-
- #Region "Declarations privées"
- Private co As TcpClient
- Private ns As NetworkStream
- Private sr As StreamReader
-
- Private Server As String
- Private ServerPort As Integer = 110
- Private User As String
- Private PWord As String
-
- Private NbMails As Integer = 0
-
- Private NetStrm As NetworkStream
- Private RdStrm As StreamReader
- #End Region
-
- #Region "Properties Publiques"
-
- ' Nom de l'utilisateur
- Public Property UserName() As String
- Get
- Return User
- End Get
- Set(ByVal value As String)
- User = value
- End Set
- End Property
-
- ' Mot de passe
- Public Property PassWord() As String
- Get
- Return PWord
- End Get
- Set(ByVal value As String)
- PWord = value
- End Set
- End Property
-
- ' Nom du serveur
- Public Property ServerName() As String
- Get
- Return Server
- End Get
- Set(ByVal value As String)
- Server = value
- End Set
- End Property
-
- ' Numéro du port de connexion
- Public Property ServerPortNumber() As Integer
- Get
- Return ServerPort
- End Get
- Set(ByVal value As Integer)
- ServerPort = value
- End Set
- End Property
-
- ' Obtient le nombre de mails
- Public ReadOnly Property NumberOfMails() As Integer
- Get
- Return NbMails
- End Get
- End Property
- #End Region
-
- ' Evenement renvoyant les informations de connexion etc...
- Public Event ConnectionStatus(ByVal message As String)
-
- ' Reception des messages et sauvegarde
- ' ou non dans un fichier
- Public Function receiveMessage(ByVal messageIndex As Integer, ByRef messageStream As String, Optional ByVal saveFileName As String = "") As Boolean
- Dim szTemp As String
- Dim sOut As String
- Dim message As String = ""
- Try
- sOut = "RETR " & messageIndex.ToString() & vbCrLf
- SendStream(sOut)
- szTemp = sr.ReadLine
-
- RaiseEvent ConnectionStatus(szTemp)
-
- Dim tempString As String = ""
- If szTemp(0) <> "-" Then
- While szTemp <> "."
- tempString = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Convert(System.Text.Encoding.ASCII, System.Text.Encoding.UTF8, EncodeByte(szTemp)))
- message = message & tempString & vbCrLf
- szTemp = sr.ReadLine()
- End While
- End If
-
- messageStream = message
-
- ' Sauvegarde du mail
- If saveFileName <> "" Then
- Dim myFile As New System.IO.FileInfo(saveFileName)
- Dim myTextWriter As System.IO.TextWriter
-
- myTextWriter = myFile.CreateText()
- myTextWriter.Write(messageStream)
- myFile = Nothing
- myTextWriter.Close()
- myTextWriter.Dispose()
- Return True
- End If
-
- Return True
- Catch ex As Exception
- RaiseEvent ConnectionStatus(ex.Message.ToString())
- Return False
- End Try
-
-
- End Function
-
- ' Supprime le message passé en paramètre
- Public Function DeleteMessage(ByVal messageIndex As Integer) As Boolean
- Dim data As String = "DELE " & messageIndex.ToString & vbCrLf
-
- SendStream(data)
-
- Dim tmpString As String = sr.ReadLine()
- If tmpString.Substring(0, 4) = "-ERR" Then
- MsgBox("Could Not Delete Message")
- RaiseEvent ConnectionStatus("Le message " & messageIndex & " n'a pas été supprimé !")
- Return False
- Else
- RaiseEvent ConnectionStatus("Le message " & messageIndex & " a été supprimé !")
- Return True
- End If
- End Function
-
- ' Connection à la boite
- Public Function connect() As Boolean
-
- NbMails = 0
- Dim retServer As String
- Try
- ' Initialisation
- co = New TcpClient(Server, ServerPort)
- ns = co.GetStream()
- sr = New StreamReader(co.GetStream())
- 'sr.ReadLine()
-
- Dim sOut As String = "USER " & User & vbCrLf
-
- ' Envoi du login
- SendStream(sOut)
- retServer = sr.ReadLine
- RaiseEvent ConnectionStatus(retServer)
-
- ' Envoi du mot de passe
- sOut = "PASS " & PWord & vbCrLf
- SendStream(sOut)
- retServer = sr.ReadLine
- RaiseEvent ConnectionStatus(retServer)
-
- If retServer.Substring(0, 4) <> "-ERR" Then
- NbMails = RecupMsgInfo(1)
- RaiseEvent ConnectionStatus("Nombre de mails: " & NbMails.ToString())
- Return True
- Else
- RaiseEvent ConnectionStatus("Identification refusée !")
- Return False
- End If
- Catch ex As Exception
- RaiseEvent ConnectionStatus(ex.ToString())
- Return False
- End Try
-
-
-
- End Function
-
- ' Déconnexion
- Public Function Disconnect() As Boolean
- Dim sOut As String
- Dim retString As String
-
- sOut = "QUIT" & vbCrLf
-
- SendStream(sOut)
- Try
- retString = sr.ReadLine()
- RaiseEvent ConnectionStatus(retString)
- Catch ex As Exception
- RaiseEvent ConnectionStatus(ex.Message)
- End Try
-
- sr.Close()
- ns.Close()
- co.Close()
- Return True
- End Function
-
- ' Envoi des commandes
- Private Sub SendStream(ByVal s As String)
- Dim FluxSortant() As Byte
- FluxSortant = EncodeByte(s)
- Try
- ns.Write(FluxSortant, 0, FluxSortant.Length)
- Catch ex As Exception
- RaiseEvent ConnectionStatus(ex.Message)
- End Try
- End Sub
-
- ' Encodage des commandes pour POP3
- Private Function EncodeByte(ByVal s As String) As Byte()
- Return System.Text.ASCIIEncoding.ASCII.GetBytes(s.ToCharArray())
- End Function
-
- ' Recupération du nombre de message
- ' ou du corps des messages
- Private Function RecupMsgInfo(ByVal iMode As Integer, ByVal ParamArray i() As Integer) As Integer
- Dim FluxSortant As String = ""
- Dim sTempLigne As String = "+OK "
-
-
- Select Case iMode
- Case 1
- FluxSortant = "STAT" + vbCrLf
- Case 2
- FluxSortant = "LIST " + i(0).ToString() + "\r\n"
- End Select
-
- Dim sTemp As String() = {"0"}
-
- Try
- Do
- SendStream(FluxSortant)
- sTempLigne = sr.ReadLine()
- RaiseEvent ConnectionStatus(sTempLigne)
-
- sTemp = sTempLigne.Split(" ")
-
- Loop While (sTempLigne = "+OK ")
- Catch ex As SocketException
- RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
- Catch ex As ArgumentException
- RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
- End Try
-
- Try
- Dim iWordCount As Integer = 0
- For iWordCount = 0 To sTemp.Length - 1
- If IsNumeric(sTemp(iWordCount)) Then
- Return Integer.Parse(sTemp(iWordCount))
- End If
- Next
-
- Catch ex As Exception
- RaiseEvent ConnectionStatus(ex.Message)
- Return 0
- End Try
-
- End Function
-
-
- End Class
Imports System
Imports System.IO
Imports System.Net
Imports System.Data
Imports System.Net.Mail
Imports System.Collections
Imports System.Net.Sockets
' class de connexion POP3
' Téléchargement des messages
Public Class clsPOP3
#Region "Declarations privées"
Private co As TcpClient
Private ns As NetworkStream
Private sr As StreamReader
Private Server As String
Private ServerPort As Integer = 110
Private User As String
Private PWord As String
Private NbMails As Integer = 0
Private NetStrm As NetworkStream
Private RdStrm As StreamReader
#End Region
#Region "Properties Publiques"
' Nom de l'utilisateur
Public Property UserName() As String
Get
Return User
End Get
Set(ByVal value As String)
User = value
End Set
End Property
' Mot de passe
Public Property PassWord() As String
Get
Return PWord
End Get
Set(ByVal value As String)
PWord = value
End Set
End Property
' Nom du serveur
Public Property ServerName() As String
Get
Return Server
End Get
Set(ByVal value As String)
Server = value
End Set
End Property
' Numéro du port de connexion
Public Property ServerPortNumber() As Integer
Get
Return ServerPort
End Get
Set(ByVal value As Integer)
ServerPort = value
End Set
End Property
' Obtient le nombre de mails
Public ReadOnly Property NumberOfMails() As Integer
Get
Return NbMails
End Get
End Property
#End Region
' Evenement renvoyant les informations de connexion etc...
Public Event ConnectionStatus(ByVal message As String)
' Reception des messages et sauvegarde
' ou non dans un fichier
Public Function receiveMessage(ByVal messageIndex As Integer, ByRef messageStream As String, Optional ByVal saveFileName As String = "") As Boolean
Dim szTemp As String
Dim sOut As String
Dim message As String = ""
Try
sOut = "RETR " & messageIndex.ToString() & vbCrLf
SendStream(sOut)
szTemp = sr.ReadLine
RaiseEvent ConnectionStatus(szTemp)
Dim tempString As String = ""
If szTemp(0) <> "-" Then
While szTemp <> "."
tempString = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Convert(System.Text.Encoding.ASCII, System.Text.Encoding.UTF8, EncodeByte(szTemp)))
message = message & tempString & vbCrLf
szTemp = sr.ReadLine()
End While
End If
messageStream = message
' Sauvegarde du mail
If saveFileName <> "" Then
Dim myFile As New System.IO.FileInfo(saveFileName)
Dim myTextWriter As System.IO.TextWriter
myTextWriter = myFile.CreateText()
myTextWriter.Write(messageStream)
myFile = Nothing
myTextWriter.Close()
myTextWriter.Dispose()
Return True
End If
Return True
Catch ex As Exception
RaiseEvent ConnectionStatus(ex.Message.ToString())
Return False
End Try
End Function
' Supprime le message passé en paramètre
Public Function DeleteMessage(ByVal messageIndex As Integer) As Boolean
Dim data As String = "DELE " & messageIndex.ToString & vbCrLf
SendStream(data)
Dim tmpString As String = sr.ReadLine()
If tmpString.Substring(0, 4) = "-ERR" Then
MsgBox("Could Not Delete Message")
RaiseEvent ConnectionStatus("Le message " & messageIndex & " n'a pas été supprimé !")
Return False
Else
RaiseEvent ConnectionStatus("Le message " & messageIndex & " a été supprimé !")
Return True
End If
End Function
' Connection à la boite
Public Function connect() As Boolean
NbMails = 0
Dim retServer As String
Try
' Initialisation
co = New TcpClient(Server, ServerPort)
ns = co.GetStream()
sr = New StreamReader(co.GetStream())
'sr.ReadLine()
Dim sOut As String = "USER " & User & vbCrLf
' Envoi du login
SendStream(sOut)
retServer = sr.ReadLine
RaiseEvent ConnectionStatus(retServer)
' Envoi du mot de passe
sOut = "PASS " & PWord & vbCrLf
SendStream(sOut)
retServer = sr.ReadLine
RaiseEvent ConnectionStatus(retServer)
If retServer.Substring(0, 4) <> "-ERR" Then
NbMails = RecupMsgInfo(1)
RaiseEvent ConnectionStatus("Nombre de mails: " & NbMails.ToString())
Return True
Else
RaiseEvent ConnectionStatus("Identification refusée !")
Return False
End If
Catch ex As Exception
RaiseEvent ConnectionStatus(ex.ToString())
Return False
End Try
End Function
' Déconnexion
Public Function Disconnect() As Boolean
Dim sOut As String
Dim retString As String
sOut = "QUIT" & vbCrLf
SendStream(sOut)
Try
retString = sr.ReadLine()
RaiseEvent ConnectionStatus(retString)
Catch ex As Exception
RaiseEvent ConnectionStatus(ex.Message)
End Try
sr.Close()
ns.Close()
co.Close()
Return True
End Function
' Envoi des commandes
Private Sub SendStream(ByVal s As String)
Dim FluxSortant() As Byte
FluxSortant = EncodeByte(s)
Try
ns.Write(FluxSortant, 0, FluxSortant.Length)
Catch ex As Exception
RaiseEvent ConnectionStatus(ex.Message)
End Try
End Sub
' Encodage des commandes pour POP3
Private Function EncodeByte(ByVal s As String) As Byte()
Return System.Text.ASCIIEncoding.ASCII.GetBytes(s.ToCharArray())
End Function
' Recupération du nombre de message
' ou du corps des messages
Private Function RecupMsgInfo(ByVal iMode As Integer, ByVal ParamArray i() As Integer) As Integer
Dim FluxSortant As String = ""
Dim sTempLigne As String = "+OK "
Select Case iMode
Case 1
FluxSortant = "STAT" + vbCrLf
Case 2
FluxSortant = "LIST " + i(0).ToString() + "\r\n"
End Select
Dim sTemp As String() = {"0"}
Try
Do
SendStream(FluxSortant)
sTempLigne = sr.ReadLine()
RaiseEvent ConnectionStatus(sTempLigne)
sTemp = sTempLigne.Split(" ")
Loop While (sTempLigne = "+OK ")
Catch ex As SocketException
RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
Catch ex As ArgumentException
RaiseEvent ConnectionStatus("Erreur lors du chargement des messages" & vbCrLf & ex.ToString())
End Try
Try
Dim iWordCount As Integer = 0
For iWordCount = 0 To sTemp.Length - 1
If IsNumeric(sTemp(iWordCount)) Then
Return Integer.Parse(sTemp(iWordCount))
End If
Next
Catch ex As Exception
RaiseEvent ConnectionStatus(ex.Message)
Return 0
End Try
End Function
End Class