|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CLASSE DE CONNEXION POP3 AVEC TÉLÉCHARGEMENT DES MESSAGES
Information sur la source
Description
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
- 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
Historique
- 16 décembre 2005 16:31:36 :
- Mise à jour de la fonction Connect(). Celle çi renvoyait True lorsque l'hôte "tait inconnu. "System.Net.Sockets.SocketException"
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Source pour la récuperation de mail par POP3 [ par aoncoquin ]
Qui connait une source qui download les e-mails d'un serveur ?Je connais une source qui check les nouveaux e-mails, mais pas qui les récupère !Merci d
Fichier au format .eml [ par Hobby ]
Bonjour,J'utilise pour relever certaine boite e-mail une dll (http://www.adminsystem.com) qui creer des fichiers au format .eml qui est un standard de
VBscript - Détection E-mail [ par CyberJS ]
Bonjour,J'ai fait un formulaire sur mon site et j'aimerais que dans le champs "email" il y ait l'adresse email du client Est-possible ?? Si oui, merci
Envoyer un mail avec une pièce jointe sous Visual Basic.Net [ par didou56 ]
Bonjour,Je sais que sur le forum il y a plien de réponse à cette question mais je n'ai pas trouvé ce que je cherchais.Voila j'aimerai envoyer un email
Envoyer un email via VBA [HELP] [ par Appolon ]
Bonsoir,Voici mon code:Dim myOlApp As New Outlook.ApplicationDim myItem As Outlook.MailItemSet myItem = myOlApp.CreateItem(olMailItem)'tu crée l'objet
envoie email en VBA Excel [ par Batik ]
Bonjour, je sais comment envoyer un mail par le biais d'une macro en excel. Le seul point bloquant est le suivant: je voudrais que l'expéditeur (= "fr
Email+piece jointe avec Winsocks sous VBA access2002 [ par french_coff ]
Bonjour a toute la communauté française des programmeursJ'ai un probleme qui me prend la tete depuis pas mal de temps deja,je suis sous access et je s
Email sur Gmail (le webmail de google) [ par nihaoma ]
salut à tous,ce n'est pas vraiment une question, juste une proposition, en effet, je dispose d'une adresse sous Gmail (pour ceux qui ne connaisse
Sécurité dans 1 checkeur sur POP3 [ par yan35 ]
Bonjour,Je me pose une question de sécurité :Dans 1 checkeur de mail sur POP3, lorsqu'on lit 1 mail par l'instruction "RETR 1" et
E-mail [ par pseudoOM ]
Bonjour !Je voudrais savoir comment on peut faire pour envoyer un mail en cliquant sur un bouton ? En fait en cliquant sur le bouton le programme doit
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|