Hi,
I converted this c# pop3 mail class to vb.net. Maybe this will
help.
http://www.programmersheaven.com/2/Art_CSharp_3
How to use
Dim mail As New Pop3Mail
mail.Connect("mail.xxxx.net", "user", "password")
For Each msg As Pop3Mail.Pop3Message In mail.List
Trace.WriteLine(DirectCast(mail.Retrieve(msg),
Pop3Mail.Pop3Message).message)
Next
The class
Imports System.Net.Sockets
Public Class Pop3Mail
Inherits System.Net.Sockets.TcpClient
Public Class Pop3Exception
Inherits System.ApplicationException
Public Sub New(ByVal str As String)
MyBase.New(str)
End Sub 'New
End Class 'Pop3Exception
Public Class Pop3Message
Public number As Long
Public bytes As Long
Public retrieved As Boolean
Public message As String
End Class 'Pop3Message
Public Overloads Sub Connect(ByVal server As String, ByVal username As
String, ByVal password As String)
Dim message As String
Dim strResponse As String
Connect(server, 110)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(Response)
End If
message = "USER " + username + vbCr + vbLf
Write(message)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(strResponse)
End If
message = "PASS " + password + vbCr + vbLf
Write(message)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(strResponse)
End If
End Sub 'Connect
Public Sub Disconnect()
Dim message As String
Dim strResponse As String
message = "QUIT" + vbCr + vbLf
Write(message)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(strResponse)
End If
End Sub 'Disconnect
Public Function List() As ArrayList
Dim message As String
Dim strResponse As String
Dim retval As New ArrayList
message = "LIST" + vbCr + vbLf
Write(message)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(strResponse)
End If
While True
strResponse = Response()
If strResponse = "." & vbCr & vbLf Then
Return retval
Else
Dim msg As New Pop3Message
Dim seps As Char() = " ".ToCharArray
Dim values As String() = strResponse.Split(seps)
msg.number = Int32.Parse(values(0))
msg.bytes = Int32.Parse(values(1))
msg.retrieved = False
retval.Add(msg)
End If
End While
End Function 'List
Public Function Retrieve(ByVal rhs As Pop3Message) As Pop3Message
Dim message As String
Dim strResponse As String
Dim msg As New Pop3Message
msg.bytes = rhs.bytes
msg.number = rhs.number
message = "RETR " & rhs.number & vbCr & vbLf
Write(message)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(strResponse)
End If
msg.retrieved = True
While True
strResponse = Response()
If strResponse = "." & vbCr & vbLf Then
Exit While
Else
msg.message += strResponse
End If
End While
Return msg
End Function 'Retrieve
Private Sub Write(ByVal message As String)
Dim en As New System.Text.ASCIIEncoding
Dim WriteBuffer(1023) As Byte
WriteBuffer = en.GetBytes(message)
Dim stream As NetworkStream = GetStream()
stream.Write(WriteBuffer, 0, WriteBuffer.Length)
Debug.WriteLine("WRITE:" + message)
End Sub 'Write
Public Sub Delete(ByVal rhs As Pop3Message)
Dim message As String
Dim strResponse As String
message = "DELE " & rhs.number & vbCr & vbLf
Write(message)
strResponse = Response()
If strResponse.Substring(0, 3) <> "+OK" Then
Throw New Pop3Exception(strResponse)
End If
End Sub 'Delete
Private Function Response() As String
Dim enc As New System.Text.ASCIIEncoding
Dim serverbuff() As Byte = New [Byte](1023) {}
Dim stream As NetworkStream = GetStream()
Dim count As Integer = 0
While True
Dim buff() As Byte = New [Byte](1) {}
Dim bytes As Integer = stream.Read(buff, 0, 1)
If bytes = 1 Then
serverbuff(count) = buff(0)
count += 1
If buff(0) = Asc(vbLf) Then
Exit While
End If
Else
Exit While
End If
End While
Dim retval As String = enc.GetString(serverbuff, 0, count)
Debug.WriteLine("READ:" + retval)
Return retval
End Function 'Response
End Class
Ken
---------------------------------
"Guoqi Zheng" <no@sorry.nl> wrote in message
news:O$***************@TK2MSFTNGP11.phx.gbl...
Dear sir,
I am writing a pop3 component myself.
After sending "RETR" command, I use below function to get the response from
Pop server. For some pop servers, it works ok, but some other pop servers
such as mailenable.com returns "+OK 2222 octets", followed by many white
space.
It seems that my function does not understand what the server is responsing
and return with all white space except the first line.
Does some one familiar with RFC standards and can point out what I did wrong
here.
Public Function GetResponse() As String
Dim Start As Double
Dim Tmr As Double
Dim bytes() As Byte
Start = Now.TimeOfDay.TotalSeconds
ReDim bytes(qqTcpClient.ReceiveBufferSize)
While Not qqNetworkStream.DataAvailable
Tmr = Now.TimeOfDay.TotalSeconds - Start
If Tmr > m_TimeOut Then
GetResponse = "TIMEOUT!"
Exit Function
End If
End While
If qqNetworkStream.DataAvailable Then
qqNetworkStream.Read(bytes, 0, CInt(qqTcpClient.ReceiveBufferSize))
GetResponse = System.Text.Encoding.ASCII.GetString(bytes)
Else
GetResponse = "TIMEOUT!"
Exit Function
End If
End Function
--
Kind regards
Guoqi Zheng
guoqi AT meetholland dot com
Http://www.meetholland.com