Voici une classe de récupération de mails faite en Vb.NET 2005.
Il est possible d'enregistrer les messages au format eml.
Source / Exemple :
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.