Imports System.Net Imports System.Net.Sockets Imports System.IO Imports System.Net.Mail Imports DevExpress.Xpo Public Class SISPOP3Base ' variables for pop3 class Public pop3host As [String] Public port As Integer Public user As [String] Public pwd As [String] Public command As [String] Public w_TcpClient As TcpClient Public w_NetStream As NetworkStream Public w_ReadStream As StreamReader Public bData As Byte() 'for the data, tat we'll recive Public Function DoConnect(pop3host As [String], port As Integer, user As [String], pwd As [String]) As String ' create POP3 connection w_TcpClient = New TcpClient(pop3host, port) Try ' initialization w_NetStream = w_TcpClient.GetStream() w_ReadStream = New StreamReader(w_TcpClient.GetStream()) w_ReadStream.ReadLine() ' send login command = "USER " & user & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) w_ReadStream.ReadLine() ' send pwd command = "PASS " & pwd & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) w_ReadStream.ReadLine() Catch err As InvalidOperationException Return ("Error: " & err.ToString()) End Try Return "+OK" End Function Public Function GetStat() As String ' Send STAT command to get number of mail and total size command = "STAT" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Return w_ReadStream.ReadLine() End Function Public Function GetList() As String ' Send LIST command with no parametrs to get all information Dim sTemp As String ' For saving 'list' results Dim sList As String = "" command = "LIST" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) sTemp = w_ReadStream.ReadLine() If sTemp(0) <> "-"c Then ' errors begins with '-' While sTemp <> "." 'saving data to string while not found '.' sList += sTemp & vbCr & vbLf sTemp = w_ReadStream.ReadLine() End While Else Return sTemp End If Return sList End Function Public Function GetList(num As Integer) As String ' Send LIST command with number of a letter command = "LIST " & num & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Return w_ReadStream.ReadLine() End Function Public Function Retr(num As Integer) As String Dim sTemp As String Dim sBody As String = "" Try command = "RETR " & num & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) sTemp = w_ReadStream.ReadLine() If sTemp(0) <> "-"c Then 'errors begins with - While sTemp <> "." ' . - is the end of the server response sBody += sTemp & vbCr & vbLf sTemp = w_ReadStream.ReadLine() End While Else Return sTemp End If Catch err As InvalidOperationException Return ("Error: " & err.ToString()) End Try Return sBody End Function Public Function Dele(num As Integer) As String ' Send DELE command to delete message with specified number command = "DELE " & num & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Return w_ReadStream.ReadLine() End Function Public Function Rset() As String ' Send RSET command to unmark all deleteting messages command = "RSET" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Return w_ReadStream.ReadLine() End Function Public Function Quit() As String ' Send QUIT command = "QUIT" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Dim tmp As [String] = w_ReadStream.ReadLine() w_NetStream.Close() w_ReadStream.Close() Return tmp End Function Public Function GetTop(num As Integer) As String Dim sTemp As String Dim [sTop] As String = "" Try ' retrieve mail with number mail parameter command = "TOP " & num & " n" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) sTemp = w_ReadStream.ReadLine() If sTemp(0) <> "-"c Then While sTemp <> "." [sTop] += sTemp & vbCr & vbLf sTemp = w_ReadStream.ReadLine() End While Else Return sTemp End If Catch err As InvalidOperationException Return ("Error: " & err.ToString()) End Try Return [sTop] End Function Public Function GetTop(num_mess As Integer, num_strok As Integer) As String Dim sTemp As String Dim [sTop] As String = "" Try ' retrieve mail with number mail parameter command = "TOP " & num_mess & " " & num_strok & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) sTemp = w_ReadStream.ReadLine() If sTemp(0) <> "-"c Then While sTemp <> "." [sTop] += sTemp & vbCr & vbLf sTemp = w_ReadStream.ReadLine() End While Else Return sTemp End If Catch err As InvalidOperationException Return ("Error: " & err.ToString()) End Try Return [sTop] End Function Public Function GetUidl() As String Dim sTemp As String Dim sUidl As String = "" command = "UIDL" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) sTemp = w_ReadStream.ReadLine() If sTemp(0) <> "-"c Then ' errors begins with '-' While sTemp <> "." 'saving data to string while not found '.' sUidl += sTemp & vbCr & vbLf sTemp = w_ReadStream.ReadLine() End While Else Return sTemp End If Return sUidl End Function Public Function GetUidl(num As Integer) As String command = "UIDL " & num & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Return w_ReadStream.ReadLine() End Function Public Function GetNoop() As String ' Send NOOP command to check if we are connected command = "NOOP" & vbCr & vbLf bData = System.Text.Encoding.ASCII.GetBytes(command.ToCharArray()) w_NetStream.Write(bData, 0, bData.Length) Return w_ReadStream.ReadLine() End Function End Class Public Class SISPOP3Message Public Function GetFrom(messTop As String) As String messTop = messTop.Remove(0, (messTop.IndexOf(vbCr & vbLf & "From:") + 7)) messTop = messTop.Remove(messTop.IndexOf(ControlChars.Cr), ((messTop.Length - messTop.IndexOf(ControlChars.Cr)) - 1)) Return messTop End Function Public Function GetDate(messTop As String) As String messTop = messTop.Remove(0, (messTop.IndexOf(vbCr & vbLf & "Date:") + 7)) messTop = messTop.Remove(messTop.IndexOf(ControlChars.Cr), (messTop.Length - messTop.IndexOf(ControlChars.Cr))) Return messTop End Function Public Function GetMessID(messTop As String) As String messTop = messTop.Remove(0, (messTop.IndexOf(vbCr & vbLf & "Message-ID: ") + 13)) messTop = messTop.Remove(messTop.IndexOf(ControlChars.Cr), (messTop.Length - messTop.IndexOf(ControlChars.Cr))) Return messTop End Function Public Function GetTo(messTop As String) As String messTop = messTop.Remove(0, (messTop.IndexOf(vbCr & vbLf & "To:") + 6)) messTop = messTop.Remove(messTop.IndexOf(ControlChars.Cr), (messTop.Length - messTop.IndexOf(ControlChars.Cr))) Return messTop End Function Public Function GetSubject(messTop As String) As String messTop = messTop.Remove(0, (messTop.IndexOf(vbCr & vbLf & "Subject:") + 10)) messTop = messTop.Remove(messTop.IndexOf(ControlChars.Cr), (messTop.Length - messTop.IndexOf(ControlChars.Cr))) Return messTop End Function Public Function GetBody(AllMessage As String) As String AllMessage = AllMessage.Remove(0, (AllMessage.IndexOf(vbCr & vbLf & vbCr & vbLf))) Return AllMessage End Function End Class 'Public Class SISSendMail ' ReadOnly Property ContactsTo As XPCollection(Of Contacts) ' Get ' Return New xpcoll ' End Get ' End Property ' Private Function SendMail(_Host As String, _Port As Long, _FromAddress As String, _Subject As String, _Body As String) As String ' Try ' Dim smtp As New SmtpClient() ' Dim message As New MailMessage() ' smtp.Host = _Host ' smtp.Port = _Port ' smtp.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials ' 'smtp.Credentials = new System.Net.NetworkCredential("username", "password"); ' message.Subject = _Subject ' message.Body = _Body ' message.From = New MailAddress(_FromAddress) ' message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure ' message.Priority = MailPriority.Normal ' ' Make the list of recipients. ' If [To].Count > 0 Then ' For Each item As Contact In [To] ' message.[To].Add(New MailAddress(item.Email, item.FullName)) ' Next ' End If ' If CC.Count > 0 Then ' For Each item As Contact In CC ' message.CC.Add(New MailAddress(item.Email, item.FullName)) ' Next ' End If ' If Bcc.Count > 0 Then ' For Each item As Contact In Bcc ' message.Bcc.Add(New MailAddress(item.Email, item.FullName)) ' Next ' End If ' ' Create the file attachment (from the File property) for this e-mail message. ' If File IsNot Nothing Then ' Dim tempFileName As String = Oid.ToString() ' Using fileStream As New FileStream(tempFileName, FileMode.OpenOrCreate) ' File.SaveToStream(fileStream) ' fileStream.Position = 0 ' ' Create attachment by using existing fileStream. ' Dim data As New Attachment(fileStream, System.Net.Mime.MediaTypeNames.Application.Octet) ' ' Add time stamp information for the file. ' Dim disposition As System.Net.Mime.ContentDisposition = data.ContentDisposition ' disposition.FileName = File.FileName ' disposition.Size = fileStream.Length ' disposition.CreationDate = System.IO.File.GetCreationTime(tempFileName) ' disposition.ModificationDate = System.IO.File.GetLastWriteTime(tempFileName) ' disposition.ReadDate = System.IO.File.GetLastAccessTime(tempFileName) ' ' Add the attachment to this message. ' message.Attachments.Add(data) ' ' Send the message. ' smtp.Send(message) ' data.Dispose() ' ' Delete temp file. ' If System.IO.File.Exists(tempFileName) Then ' System.IO.File.Delete(tempFileName) ' End If ' End Using ' End If ' Catch E As SmtpException ' Return "Mail send failed with message: " + E.Message ' End Try ' Return "Mail was send successfully" ' End Function 'End Class 'Dim pop3 As POP3class 'pop3 = New POP3class() 'pop3.DoConnect("your.mail.server", 110, "username", "password") 'pop3.GetStat() '' and if we have mail: 'Dim msg As MessageClass 'msg = New MessageClass() 'Dim sMessageTop As String = msg.GetTop(1) ''OK, message is well, lets download it. 'Dim sAllMessage As String = msg.Retr(1) 'msg.GetBody(sAllMessage)