Codice per la parte in cui mi sono bloccata non ce l'ho perchè non so proprio come fare. Ma provo a mettere il punto esatto in cui mi blocco, magari aiuta a capire il mio problema.
Riesco a collegarmi al mio server con il comando telnet mail.mioserver.it 110 e poi specificando user e password con i comandi USER e PASS (uso System.Net.Sockets)
Poi con il comando STAT recupero il numero di messaggi della mia casella, e con il comando
RETR li recupero uno per uno.
E qui mi blocco.
Riesco a recuperare diversi dati, tra cui l'oggetto, la data, il mittente, destinatario e anche il corpo del messaggio. Ma quest'ultimo sembra contenere, oltre al testo della mail, anche gli allegati in formato testo! come faccio ad estrarre questi allegati e farli ritornare file "normali"?
ecco le mie funzioni (ma vanno tutte fin qui, il problema è da qui in avanti):
codice:
Public Function connect(ByVal pop3Server As String, ByVal userAccount As String, ByVal PasswordAccount As String) As Integer
Dim POP3Account As String
POP3Account = pop3Server '"mail.pop.yahoo.it"
If POP3Account.Trim = "" Then Exit Function
Try
Server = New TcpClient(POP3Account.Trim, 110)
NetStrm = Server.GetStream
RdStrm = New StreamReader(Server.GetStream)
Catch exc As Exception
MsgBox(exc.Message)
Exit Function
End Try
Dim user As String
user = userAccount
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("User name non valido.")
Return -1
End If
Dim password As String
password = PasswordAccount '"test1234"
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("Invalida la 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("Impossibile loggarsi,Controllare la password e nome account.")
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("Impossibile loggarsi,Controllare la password e nome account.")
Return -1
End If
Dim parts() As String
parts = POPResponse.Split(" ")
Dim messages As Integer
messages = CInt(parts(1))
Return messages
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
msg = ""
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
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("Formato messaggio non valido.")
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