2011-01-15 5 views
0
tcpClient.Connect(hostName, 110) 
    Dim networkStream As NetworkStream = tcpClient.GetStream() 
    Dim bytes(tcpClient.ReceiveBufferSize) As Byte 
    Dim sendBytes As Byte() 

    networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

    sendBytes = Encoding.ASCII.GetBytes("User " + userName + vbCrLf) 
    networkStream.Write(sendBytes, 0, sendBytes.Length) 

    sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

    sendBytes = Encoding.ASCII.GetBytes("Pass " + userPassword + vbCrLf) 
    networkStream.Write(sendBytes, 0, sendBytes.Length) 

    sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

    sendBytes = Encoding.ASCII.GetBytes("STAT" + vbCrLf) 
    networkStream.Write(sendBytes, 0, sendBytes.Length) 

    sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

    sendBytes = Encoding.ASCII.GetBytes("RETR " + messageNumber + vbCrLf) 
    networkStream.Write(sendBytes, 0, sendBytes.Length) 

    networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 
    returnMessage = Encoding.ASCII.GetString(bytes) 
    EmailContent.Text = returnMessage 

    sendBytes = Encoding.ASCII.GetBytes("QUIT" + vbCrLf) 
    networkStream.Write(sendBytes, 0, sendBytes.Length) 

    tcpClient.Close() 
Catch ex As Exception 
    EmailContent.Text = "Could not retrieve email or your inbox is empty" 
End Try 

Antwort

1

Ein gerader Anschluss, ohne Fehler hinzugefügt Prüfung (obwohl es nicht im Original war, entweder):

networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

sendBytes = Encoding.ASCII.GetBytes("A001 LOGIN " + userName + " " + userPassword + vbCrLf) 
networkStream.Write(sendBytes, 0, sendBytes.Length) 

sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

sendBytes = Encoding.ASCII.GetBytes("A002 SELECT INBOX" + vbCrLf) 
networkStream.Write(sendBytes, 0, sendBytes.Length) 

sTemp = networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 

sendBytes = Encoding.ASCII.GetBytes("A003 FETCH " + messageNumber + " (BODY.PEEK[])" + vbCrLf) 
networkStream.Write(sendBytes, 0, sendBytes.Length) 

networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize)) 
returnMessage = Encoding.ASCII.GetString(bytes) 
EmailContent.Text = returnMessage 

sendBytes = Encoding.ASCII.GetBytes("A004 LOGOUT" + vbCrLf) 
networkStream.Write(sendBytes, 0, sendBytes.Length) 
+0

(Beachten Sie, dass Sie EmailContent.Text in einer anderen Art und Weise nachbearbeiten müssen werden als Sie mussten es in der POP3-Version nachbearbeiten.) – dkarp

0

Ihre ursprüngliche Frage mit nur einem Codebeispiel verwendet rohe Netzwerkkommunikation. Wenn Sie eine IMAP-Verbindung in einer bestimmten Kapazität benötigen, können Sie eine .NET IMAP-Bibliothek like those listed here, um Ihr Leben einfacher zu machen.

Wenn es jedoch für ein akademisches Unterfangen oder eine Situation ist, in der Sie den Code selbst schreiben müssen, können Sie mit dieser Antwort den Quellcode der vorhandenen Open Source IMAP .NET-Bibliothekspakete herunterladen, um den benötigten Code zu kopieren und einzufügen (abhängig von der Lizenz und dem Zweck).

.NET-Bibliotheken können austauschbar zwischen VB.NET, C# und anderen Sprachen verwendet werden, sodass Sie die Sprach-Tags größtenteils ignorieren können, wenn Sie eine vorkompilierte Bibliothek verwenden.