Cita:
Aclaro que tengo habilitado POP3 desde mi webmail. Espero que alguien me pueda dar una mano porque hace horas que me estoy quemando la cabeza >_<Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host
Esta es la clase:
Código:
y este es el formulario:Imports System Imports System.Net.Sockets Imports System.Text Imports System.IO Public Class clsPOP3 Dim Server As TcpClient Dim NetStrm As NetworkStream Dim RdStrm As StreamReader Public Function connect() As Integer Dim POP3Account As String POP3Account = "pop.gmail.com" If POP3Account.Trim = "" Then Exit Function Try Server = New TcpClient(POP3Account.Trim, 995) NetStrm = Server.GetStream RdStrm = New StreamReader(Server.GetStream) Catch exc As Exception MsgBox(exc.Message) Exit Function End Try Dim user As String user = "[email protected]" Dim data As String = "USER " + user.Trim + vbCrLf Dim szData() As Byte = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) Dim POPResponse As String POPResponse = RdStrm.ReadLine If POPResponse.Substring(0, 4) = "-ERR" Then MsgBox("Invalid user Name") Return -1 End If Dim password As String password = "PASSWORD" data = "PASS " & password & vbCrLf szData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) POPResponse = RdStrm.ReadLine If POPResponse.Substring(0, 4) = "-ERR" Then MsgBox("Invalid Password") Return (-1) End If data = "STAT" + vbCrLf szData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) POPResponse = RdStrm.ReadLine If POPResponse.Substring(0, 4) = "-ERR" Then MsgBox("could not log your in") Return -1 End If data = "Stat" + vbCrLf szData = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) POPResponse = RdStrm.ReadLine If POPResponse.Substring(0, 4) = "-ERR" Then MsgBox("could not log your in") Return -1 End If Dim parts() As String parts = POPResponse.Split(" ") Dim messages, totsize As Integer 'messages = parts(3) messages = CInt(parts(1)) Return messages End Function Public Function DeleteMessage(ByVal msgIndex As Integer) Dim data As String = "DELE " & msgIndex.ToString & vbCrLf Dim SzData() As Byte = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()) NetStrm.Write(SzData, 0, SzData.Length) Dim tmpString As String = RdStrm.ReadLine() If tmpString.Substring(0, 4) = "-ERR" Then MsgBox("Could Not Delete Message") Return (-1) Else Return 11 End If End Function Public Function Quit() Dim data As String = "Quit " & vbCrLf Dim szData() As Byte = System.Text.Encoding.ASCII.GetBytes(data.ToCharArray()) NetStrm.Write(szData, 0, szData.Length) Dim tmpString As String = RdStrm.ReadLine() End Function Public Structure Message Dim _From As String Dim _To As String Dim _Date As String Dim _Subject As String Dim _CC As String Dim _BCC As String Dim _Body As String Dim _Received As String End Structure Public Function CreateFromText(ByVal strMessage As String) As Message Dim Mssg As New Message Dim brkPos As Integer Dim Header As String Dim Headers() As String Dim Body As String Dim vField As Object Dim strHeader As String Dim HeaderName As String Dim HeaderValue As String brkPos = InStr(1, strMessage, vbCrLf & vbCrLf) If brkPos Then Header = strMessage.Substring(0, brkPos - 1) Body = strMessage.Substring(brkPos + 1, _ strMessage.Length - Header.Length - 3) Mssg._Body = Body Else Throw New Exception("Invalid Message Format") Exit Function End If Headers = Split(Header, vbCrLf) Dim _header As String For Each _header In Headers brkPos = _header.IndexOf(":") If brkPos >= 0 Then HeaderName = _header.Substring(0, brkPos) Else HeaderName = "" End If HeaderValue = _header.Substring(brkPos + 1) Select Case HeaderName.ToLower Case "received" Mssg._Received = HeaderValue Case "from" Mssg._From = HeaderValue Case "to" Mssg._To = HeaderValue Case "cc" Mssg._CC = HeaderValue Case "bcc" Mssg._BCC = HeaderValue Case "subject" Mssg._Subject = HeaderValue Case "date" Mssg._Date = HeaderValue End Select Next Return Mssg End Function Function GetMessage(ByVal msgindex As Integer) As String Dim tmpString As String Dim Data As String Dim SzData() As Byte Dim msg As String Try Data = "RETR " & msgindex.ToString & vbCrLf SzData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray()) NetStrm.Write(SzData, 0, SzData.Length) tmpString = RdStrm.ReadLine() If tmpString.Substring(0, 4) <> "-ERR" Then While (tmpString <> ".") msg = msg & tmpString & vbCrLf tmpString = RdStrm.ReadLine End While End If Catch exc As InvalidOperationException MsgBox("Message Retrival Failed: " & vbCrLf & Err.ToString()) End Try Return msg End Function End Class
Código:
Muchas gracias!! Imports System Imports System.Net.Sockets Imports System.Text Imports System.IO Imports Stock.clsPOP3 Public Class frmMails Dim pop3 As New clsPOP3 Dim Server As TcpClient Dim NetStrm As NetworkStream Dim RdStrm As StreamReader Private Sub CmdDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDownload.Click Dim i As Integer Dim msg As Message Dim msgstring As String Dim messages1 As Integer Me.Cursor = Cursors.WaitCursor messages1 = pop3.connect() If messages1 = -1 Then Me.Cursor = Cursors.Default Exit Sub End If Dim originalCaption As String = Me.Text For i = 1 To messages1 Me.Text = "Downloading Message " & i.ToString & "/" & _ messages1.ToString Dim msgitem As New ListViewItem msgstring = pop3.GetMessage(i) msg = pop3.CreateFromText(msgstring) msgitem.Text = msg._From msgitem.SubItems.Add(msg._Subject) msgitem.SubItems.Add(msg._Date) ListView1.Items.Add(msgitem) TextBoxX1.AppendText(msg._Body & vbCrLf) Next Me.Text = originalCaption Me.Cursor = Cursors.Default End Sub Private Sub ListView1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.Click Dim messages As Integer 'Dim objPOP3 As POP3Message TextBoxX1.Text = pop3.GetMessage(ListView1.SelectedIndices(0) + 1) End Sub Private Sub ListView1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ListView1.KeyUp If e.KeyCode = Keys.Delete Then If pop3.DeleteMessage(ListView1.SelectedIndices(0) + 1) >= 0 Then ListView1.Items(ListView1.SelectedIndices(0)).Text = "DELETED" ListView1.Items(ListView1.SelectedIndices(0)).SubItems.Clear() MsgBox("Your Email Message is Deleted", MsgBoxStyle.Information, "Delete Message") End If End If End Sub Private Sub CmdClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClose.Click Call pop3.Quit() ListView1.Items.Clear() End Sub End Class