Ciao a tutti,
ho provato lo script per leggere la posta su POP3, ma nel debug mi dà l'errore
"Riferimento a un oggetto non impostato su un'istanza di oggetto"
in corrispondenza dell riga di codice:
"NetStream.Write(bData, 0, bData.Length())"
Qualcuno sa spiegarmi che kavolo vuole??
Invio il codice:
Private Sub invia_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles invia.Click
lblMessaggi.Text = ""
Readmail(host.Text, utente.Text, pwd.Text)
End Sub
'Manda il comando e restituisce la risposta
Function SendCommand(ByRef NetStream As NetworkStream, ByVal sToSend As String)
Dim bData() As Byte = Encoding.ASCII.GetBytes(sToSend.ToCharArray)
NetStream.Write(bData, 0, bData.Length())
Return GetResponse(NetStream)
End Function
'Controlla se c'è una risposta e la restituisce
Function GetResponse(ByRef NetStream As NetworkStream)
Dim bytes(client.ReceiveBufferSize) As Byte
NetStream.Read(bytes, 0, bytes.Length)
'Restituisce i dati ricevuti
Dim ReturnData As String = Encoding.ASCII.GetString(bytes)
Return ReturnData
End Function
Function Readmail(ByVal mail_server As String, ByVal username As String, ByVal password As String)
Dim NetStream As NetworkStream, MyResponse As String
'Apre una connessione con il server di posta sulla porta 110
Try
client.Connect(mail_server, 110)
Catch MyEx As Exception
lblMessaggi.Text += "Errore nella connessione all'host: " & mail_server & " (porta 110)<br>" & _
"L'errore riportato è: " & MyEx.Message & "<br>Controlla e riprova<br>"
End Try
'Recupera la risposta
Try
NetStream = client.GetStream()
MyResponse = GetResponse(NetStream)
Catch MyEx As Exception
lblMessaggi.Text += "Si è verificato un errore!"
End Try
'Invia il nome dell'utente (account sul server)
MyResponse = SendCommand(NetStream, "user " & utente.Text & vbCrLf)
'Invia la password
MyResponse = SendCommand(NetStream, "pass " & pwd.Text & vbCrLf)
'Controlla se il collegamento è andato a buon fine
If Left(MyResponse, 4) = "-ERR" Then
lblMessaggi.Text += "Errore nel collegamento dell'utente; controlla i dati e riprova<BR>"
lblMessaggi.Text += MyResponse & "<br>"
MyResponse = SendCommand(NetStream, "QUIT" & vbCrLf)
client.Close()
Else
'Indica che il collegamento ha avuto successo
lblMessaggi.Text += "Utente correttamente collegato<BR><BR>"
'Richiede le statistiche dell'intera casella
MyResponse = SendCommand(NetStream, "stat" & vbCrLf)
Dim tmpArray() As String
tmpArray = Split(MyResponse, " ")
Dim thisMess As Integer
Dim NumMess As String = tmpArray(1)
If CInt(NumMess) > 0 Then
lblMessaggi.Text += "Ci sono " & NumMess & " messaggi per un totale di " & tmpArray(2) & "bytes<br>"
For thisMess = 1 To CInt(NumMess)
MyResponse = SendCommand(NetStream, "list " & thisMess & vbCrLf)
tmpArray = Split(MyResponse, " ")
MyResponse = "Il messaggio Numero: " & thisMess & " occupa " & tmpArray(2) & " bytes"
lblMessaggi.Text += MyResponse & "<br>"
Next
Else
lblMessaggi.Text += "La casella è vuota"
End If
End If
'Chiudo la connessione con il server
MyResponse = SendCommand(NetStream, "QUIT" & vbCrLf)
'Chiudo la connessione TCP
client.Close()
End Function
Grazie.