+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

Posta elettronica - estrapolare dati necessari

  1. #1
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Anni fà avevo sviluppato un software per l'invio e la ricezione della posta elettronica e non avevo problemi in quanto non avevo la necessità di connettermi tramite protocollo SSL,ora invece riadattando il codice che avevo scritto e trovando alcune informazioni(con codice scritto da altri)sono riuscito a scaricare la posta con protocollo SSL però c'è un ma....
    posto immagini e spiegazioni.
    come si può vedere dall'immagine di sotto,popolo la listbox2 con i messaggi arrivati con relativo numero e la dimensione del messaggio
    Nome:   numMessaggi.JPG
Visite:  27
Grandezza:  17.2 KB
    effettuando il primo doppio click compare questo
    Nome:   Okfollows.JPG
Visite:  25
Grandezza:  10.6 KB
    e fin quì può andare anche bene ma rieffettuando il doppio click sullo stesso numero di messaggio compare tutta una serie di caratteri che fanno parte del flusso della mail ricevuta come da immagini
    Nome:   caratteri2.JPG
Visite:  28
Grandezza:  27.7 KB
    la domanda che faccio, a cui non ho trovato un modo, è come faccio ad estrapolare solo
    from,to,subject e body?
    con il vecchio codice non avevo problemi mentre riadattandolo dà errore indicando che l'indice non è compreso nell'intervallo.
    Posto del codice per capire meglio....
    Con il codice di sotto mi connetto tranquillamente
      Server = New TcpClient("pop.gmail.com", portaricezione)
            '  NetStrm = Server.GetStream
            NetStrm = Server.GetStream
            StreamSSL = New SslStream(NetStrm)
            StreamSSL.AuthenticateAsClient("pop.gmail.com")
            RdStrm = New StreamReader(StreamSSL)
            StatResp = RdStrm.ReadLine()
            ListBox1.Items.Clear()
            StatResp = Login(StreamSSL, "USER " & xxxx@gmail.com") & vbCrLf
            ListBox1.Items.Add(StatResp)
            StatResp = Login(StreamSSL, "PASS " & "*****") & vbCrLf
            ListBox1.Items.Add(StatResp)
            StatResp = Login(StreamSSL, "STAT ") & vbCrLf
            ListBox1.Items.Add(StatResp)
            server_Stat = StatResp.Split(" ")
            msgconteggio.Text = server_Stat(1)
            ret_Val = 1
            With Label4
                .ForeColor = Color.Green
                .Text = "Connesso"
            End With
    scaricaposta()
    
     Private Sub scaricaPosta()
            Dim msg As Message
            Dim msgstring As String
            For i = 1 To CInt(msgconteggio.Text)
                msgstring = GetMessage(i)
                msg = CreateFromText(msgstring)
                Dim parts As String() = msg._Date.Split(New Char() {","c})
                Dim splitData As String = parts(1)
                Dim splitpiu As String() = splitData.Split(New Char() {"+"c})
                Dgv.Item(1, i).Value = msg._Subject  si blocca quì
                Dgv.Item(2, i).Value = msg._From
                Dgv.Item(3, i).Value = msg._To
                Dgv.Item(4, i).Value = i
                Dgv.Item(5, i).Value = msg._Received
                TextBox3.AppendText(msg._Body & vbCrLf)
                Dgv.Item(0, 0).Selected = False
            Next
    
     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 GetMessage(ByVal msgindex As Integer) As String
            Dim tmpString As String
            Dim prova As String = String.Empty
            Dim Data As String
            Dim SzData() As Byte
            Dim msg As String = String.Empty
            Try
                Data = "RETR " & msgindex & vbCrLf
                SzData = System.Text.Encoding.GetEncoding(1252).GetBytes(Data)
                StreamSSL.Write(SzData, 0, SzData.Length)
                RdStrm = New StreamReader(StreamSSL)
                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
                Messagebox.Show("Recupero del Messaggio Fallito: " & vbCrLf & Err.ToString())
            End Try
            Return msg
        End Function
    
    nell'evidenziato rosso dà errore index non compreso nell'intervallo.
    Non saprei a cosa si riferisce,con il precedente codice non avevo problemi.
    Ultima modifica di sistemista; 31-05-2021 10:08 
    ℹ️ Leggi di più su sistemista ...

  2. #2
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Non so cosa contenga msgconteggio, ma "a occhio" dovrebbe essere
    For i = 0 To CInt(msgconteggio.Text) - 1
    
    ℹ️ Leggi di più su Brontolo ...

  3. #3
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Non so cosa contenga msgconteggio, ma "a occhio" dovrebbe essere
    For i = 0 To CInt(msgconteggio.Text) - 1
    
    è una textbox,continua a darmi lo stesso errore.
    ℹ️ Leggi di più su sistemista ...

  4. #4
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Certo, ma cosa contiene? Se deve indicare il numero di righe della dgv, queste partono da zero.
    Comunque, guarda in debug il valore di i.
    ℹ️ Leggi di più su Brontolo ...

  5. #5
    L'avatar di SirJo
    SirJo non è in linea Scolaretto
    - messaggio cancellato -

  6. #6
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Certo, ma cosa contiene? Se deve indicare il numero di righe della dgv, queste partono da zero.
    Comunque, guarda in debug il valore di i.
    problema risolto.
    Non c'era niente che non andava nel codice, era perfetto, il problema era nella mia testa che a volte mi perdo in un bicchiere d'acqua.
    Codice corretto e funzionante
     Private Sub scaricaPosta()
            Dim msg As Message
            Dim msgstring As String
            For i = 1 To CInt(msgconteggio.Text)
                msgstring = GetMessage(i)
                msg = CreateFromText(msgstring)
                Dim parts As String() = msg._Date.Split(New Char() {","c})
                Dim splitData As String = parts(1)
                Dim splitpiu As String() = splitData.Split(New Char() {"+"c})
     
                Dgv.Rows.Add()   mancava questa riga di codice
                Dgv.Item(1, i - 1).Value = msg._Subject
                Dgv.Item(2, i - 1).Value = msg._From
                Dgv.Item(3, i - 1).Value = msg._To
                Dgv.Item(4, i - 1).Value = i
                Dgv.Item(5, i - 1).Value = msg._Received
                TextBox3.AppendText(msg._Body & vbCrLf)
                Dgv.Item(0, 0).Selected = False
    
    per distrazione ho perso 3 giorni e la soluzione l'avevo sotto gli occhi...che testa
    Ultima modifica di sistemista; 31-05-2021 21:44 
    ℹ️ Leggi di più su sistemista ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 6
    Ultimo Post: 14-07-2018, 15:02
  2. Risposte: 0
    Ultimo Post: 09-11-2012, 15:42
  3. Raccogli Dati Tramite Posta Elettronica
    Da decarlis nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 04-11-2012, 20:56
  4. Posta elettronica con Ubuntu
    Da ceklo nel forum Tutto Linux
    Risposte: 33
    Ultimo Post: 18-01-2010, 01:58
  5. Risposte: 10
    Ultimo Post: 17-01-2008, 19:55