2011-01-15 1 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 

Répondre

1

Un port droit, sans contrôle d'erreurs ajouté (mais il n'y avait pas dans l'original, que ce soit):

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

(Notez que vous devrez EmailContent.Text post-traitement d'une manière différente de celle vous avez dû le post-traiter dans la version POP3.) – dkarp

0

Votre question d'origine avec seulement un échantillon de code utilise la communication réseau brute. Si vous avez besoin d'une connexion IMAP dans une certaine mesure, vous pouvez envisager une bibliothèque .NET IMAP like those listed here pour vous simplifier la vie. Toutefois, que ce soit pour un effort académique ou une situation où vous devez écrire le code vous-même, vous pouvez toujours utiliser cette réponse pour télécharger le code source des packages de bibliothèque IMAP .NET open source existants pour copier et coller le code dont vous avez besoin (en fonction de la licence et du but).

Les bibliothèques .NET peuvent être utilisées de manière interchangeable entre VB.NET, C# et d'autres langages, de sorte que vous pouvez ignorer les balises de langage pour la plupart si vous utilisez une bibliothèque précompilée.

Questions connexes