There are some resources on the net available:
http://www.developerfusion.com/show/4071/
http://www.codeproject.com/useritems/POP3Library.asp
http://www.programmersheaven.com/search/LinkDetail.asp?Typ=2&ID=9067
--
Greetz
Jan
________________
Read my weblog:
http://weblogs.asp.net/jan
"Calvin Luttrell/ProjectThunder.com" <
[email protected]> schreef in bericht If you search the internet you can find C# classes that can do this.
I wrote some stuff in VB.Net I've haven't tested it in about 8 months but it might get you started or at least convince you to purchase a component.
-Calvin Luttrell
ProjectThunder.com
Public Class Pop3
Inherits BusniessThunder
Implements ThunderInterface
Private oTCP As New TcpClient()
Private oStream As NetworkStream
Private _name As String
Private _ds As DataSet
Private _pagedata As Hashtable
#Region "Thunder Interface Stuff"
Property PageData() As Hashtable Implements ThunderInterface.PageData
Get
Return _pagedata
End Get
Set(ByVal Value As Hashtable)
_pagedata = Value
End Set
End Property
Property Name() As String Implements ThunderInterface.Name
Get
Return _name
End Get
Set(ByVal Value As String)
_name = Value
End Set
End Property
Property DS() As DataSet Implements ThunderInterface.DS
Get
Return _ds
End Get
Set(ByVal Value As DataSet)
_ds = Value
End Set
End Property
Function Execute() As DataSet Implements ThunderInterface.Execute
If _name.ToUpper = "DELETEMESSAGES" Then
Else
_ds = GetMessages()
End If
Return _ds
End Function
Function Logout()
SendCommand(oStream, "QUIT" + vbCrLf)
oTCP.Close()
End Function
Function DeleteMessages()
Dim orow As DataRow
For Each orow In _ds.Tables(0).Rows
If orow.RowState = DataRowState.Deleted Then
DeleteMessage(orow)
End If
Next
End Function
Sub DeleteMessage(ByVal orow As DataRow)
SendCommand(oStream, "DELE " + orow("Message-ID").ToString + vbCrLf)
End Sub
Function ExecuteThunder(ByVal oThunder As ThunderInterface)
' oThunder.PageData() = GetPageData()
oThunder.Execute()
End Function
#End Region
Sub Login()
Dim sRes As String
oTCP.Connect(_pagedata("HOST"), 110)
oStream = oTCP.GetStream
System.Diagnostics.Debug.WriteLine(GetResponse(oStream))
sRes = SendCommand(oStream, "user " + _pagedata("USER") + vbCrLf)
If sRes.StartsWith("-ERR") Then Exit Sub
System.Diagnostics.Debug.WriteLine(sRes)
sRes = SendCommand(oStream, "pass " + _pagedata("PASS") + vbCrLf)
If sRes.StartsWith("-ERR") Then Exit Sub
System.Diagnostics.Debug.WriteLine(sRes)
End Sub
Private Function GetMessages() As DataSet
Dim sRes As String
Dim sMess As String
Dim iNum As Integer
Dim oDS As New DataSet()
Login()
sRes = SendCommand(oStream, "stat" + vbCrLf)
If sRes.StartsWith("-ERR") Then Exit Function
System.Diagnostics.Debug.WriteLine(sRes)
Dim tmpArray() As String
tmpArray = Split(sRes, " ")
Dim thisMess As Integer
Dim numMess As String = tmpArray(1)
For thisMess = CInt(numMess) - 1 To 1 Step -1
' System.Threading.Thread.Sleep(30)
sMess = SendCommand(oStream, "top " + thisMess.ToString + " 10" + vbCrLf)
If sMess.StartsWith("+OK") And sMess.IndexOf(": ") > 0 Then
ParseMessage(sMess, oDS)
End If
Next
Return oDS
End Function
Function ParseMessage(ByVal sData As String, ByRef oEmailData As DataSet)
Dim iStart As Integer
Dim iEnd As Integer
Dim inextpair As Integer
Dim sMessage As String = ""
Dim sBody As String
Dim iLen As Integer
Dim iPart As Integer
Dim sname As String
Dim svalue As String
If oEmailData Is Nothing Then oEmailData = New DataSet()
If Not oEmailData.Tables.Contains("Data") Then oEmailData.Tables.Add("Data")
Dim orow As DataRow = oEmailData.Tables("Data").NewRow
Try
'Get Header and Body
sMessage = sData.Substring(1, sData.IndexOf(vbCrLf + vbCrLf))
sBody = sData.Substring(sData.IndexOf(vbCrLf + vbCrLf))
Catch
Exit Function
Finally
sData = Nothing
End Try
'Creppy Crawler
'Get Starting postion of first name pair
iPart = sMessage.IndexOf(": ", 1) + 2
'go back to name :
iStart = sMessage.LastIndexOf(vbCrLf, iPart) + 2
'get entire length of email
iLen = sMessage.Length
Try
'work until end of email
Do While iStart < iLen
'make the line we are working on is part of the name value pair
If iPart + 2 > iLen Then Exit Do
If Not sMessage.IndexOf(": ", iPart + 2) = -1 Then
'Find the next ": " for that next name pair
iPart = sMessage.IndexOf(": ", iPart) + 2
'This should shuld check for a vbcrlf between crawling to the next name pair
'This is for when someone puts ": " the freak'n suject
If sMessage.Substring(iStart, iPart - iStart).IndexOf(vbCrLf) < 0 Then
iPart = sMessage.IndexOf(": ", iPart) + 2
End If
'crawl back to find the end of the last line
inextpair = sMessage.LastIndexOf(vbCrLf, iPart) + 2
'This gives us the postion in the mini-string which is actually the length of the amount of data we want
iEnd = sMessage.Substring(iStart, inextpair - iStart).LastIndexOf(vbCrLf) + 2
Else
iEnd = iLen - iStart
End If
'Mini me string for parsing name value pair
Dim stemp = sMessage.Substring(iStart, iEnd)
sname = stemp.Substring(0, stemp.IndexOf(": "))
svalue = stemp.Substring(stemp.IndexOf(": ") + 2)
'check to see if the colomn exists yet
If Not oEmailData.Tables("Data").Columns.Contains(sname) Then
'add colomn
oEmailData.Tables("Data").Columns.Add(sname)
End If
'assign value
orow(sname) = svalue
iStart += iEnd
Loop
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
End Try
'grab body and stick it in the table
If Not oEmailData.Tables("Data").Columns.Contains("BODY") Then
oEmailData.Tables("Data").Columns.Add("BODY")
End If
orow("BODY") = sBody
'add row
oEmailData.Tables(0).Rows.Add(orow)
'TODO parse body remove attachments
Return oEmailData
End Function
Function SendCommand(ByRef netstream As NetworkStream, ByVal sToSend As String) As String
Dim bData() As Byte = Encoding.ASCII.GetBytes(sToSend.ToCharArray)
netstream.Write(bData, 0, bData.Length())
Return GetResponse(netstream)
End Function
' check if there is a response to get and return it
Function GetResponse(ByRef netstream As NetworkStream) As String
Dim bytes(oTCP.ReceiveBufferSize) As Byte
Dim ret As Integer = netstream.Read(bytes, 0, bytes.Length)
' Returns the data received
Dim returndata As String = Encoding.ASCII.GetString(bytes)
Return returndata
End Function
End Class