FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index All products support Lettura mails
Posts: 340
Joined: Thu Jan 25, 2007 03:53 PM
Lettura mails
Posted: Fri Jan 25, 2019 05:52 PM

Ciao,

qualcuno ha qualche esempio minimale per leggere le mails con harbour/fw ?

Ho trovato questo esempio nel forum, ma non va, forse perchè è per xHarbour: (qualche dritta ?)

(ho notato che sta fermo su: aMail = oCli:RetrieveAll() per ore e continua a scaricare dati da internet)
(ho usato pop.tiscali.it, userid,password)

STATIC FUNCTION GETMAIL( cServer, cUser, cPassword )

LOCAL lOk := .F.

LOCAL oCli

LOCAL aMail, aPar, cMsg, oAtt

LOCAL i

cUser := StrTran( cUser, "@", "&at;" )
    oCli = TIPClientPOP():New( "pop://" + cUser + ":" + cPassword + "@" + cServer )

    IF EMPTY( oCli ); BREAK; ENDIF

    oCli:oUrl:cUserid = Strtran( cUser, "&at;", "@" )

    IF !oCli:Open(); BREAK; ENDIF

    aMail = oCli:RetrieveAll()

    FOR i = 1 TO LEN( aMail ) - 1
        aPar = aMail[ i ]:GetMultiParts()

        IF LEN( aPar ) = 0
            cMsg = "Data: " + aMail[ i ]:GetFieldPart( "Date" ) + CRLF +;
                   "Oggetto: " + aMail[ i ]:GetFieldPart( "Subject" ) + CRLF +;
                   "Mittente: " + aMail[ i ]:GetFieldPart( "From" ) + CRLF + CRLF +;
                   "Messaggio: " + CRLF + CRLF + aMail[ i ]:GetBody()
        ELSE
            cMsg = "Data: " + aMail[ i ]:GetFieldPart( "Date" ) + CRLF +;
                   "Oggetto: " + aMail[ i ]:GetFieldPart( "Subject" ) + CRLF +;
                   "Mittente: " + aMail[ i ]:GetFieldPart( "From" ) + CRLF + CRLF +;
                   "Messaggio: " + CRLF + CRLF + BODY( aPar )
        ENDIF

        WHILE ( oAtt := aMail[ i ]:NextAttachment() ) != NIL
            IF !EMPTY( oAtt:GetFileName() )
                cMsg += CRLF + "Allegato: " + oAtt:GetFileName()

// IF !oAtt:DetachFile(); BREAK; ENDIF
ENDIF
ENDDO

        ? cMsg
    NEXT

    lOk = .T.

IF !EMPTY( oCli ); oCli:Close(); ENDIF

RETURN lOk

STATIC FUNCTION BODY( aPar )

LOCAL cMsg := ""

LOCAL i

FOR i = 1 TO LEN( aPar )
    IF EMPTY( aPar[ i ]:GetFieldPart( "Content-Disposition" ) )
        cMsg += aPar[ i ]:GetBody()
    ENDIF
NEXT

RETURN ALLTRIM( cMsg )
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 05:57 PM
L'esempio è mio ma non è corretto. Eccoti la versione attuale.

Code (fw): Select all Collapse
STATIC FUNCTION GETMAIL( cServer, cUser, cPassword )

    LOCAL lOk := .F.

    LOCAL oCli

    LOCAL aMail, aPar, cMsg, oAtt

    LOCAL i, j

    TRY
        oCli = TIPClientPOP():New( "pop://" + STRTRAN( cUser, "@", "&at;" ) + ":" + cPassword + "@" + cServer )

        IF EMPTY( oCli ); BREAK; ENDIF

        oCli:oUrl:cUserid = cUser

        IF !oCli:Open(); BREAK; ENDIF

        aMail = oCli:RetrieveAll()

        FOR i = 1 TO LEN( aMail ) - 1
            cMsg = "Data: " + aMail[ i ]:GetFieldPart( "Date" ) + CRLF +;
                   "Oggetto: " + aMail[ i ]:GetFieldPart( "Subject" ) + CRLF +;
                   "Mittente: " + aMail[ i ]:GetFieldPart( "From" ) + CRLF + CRLF

            aPar = aMail[ i ]:GetMultiParts()

            IF LEN( aPar ) = 0
                cMsg += "Messaggio: " + CRLF + CRLF + aMail[ i ]:GetBody()
            ELSE
                cMsg += "Messaggio: " + CRLF + CRLF + BODY( aPar )
            ENDIF

            WHILE ( oAtt := aMail[ i ]:NextAttachment() ) != NIL
                IF !EMPTY( oAtt:GetFileName() )
                    cMsg += CRLF + "Allegato: " + oAtt:GetFileName()
//                    IF !oAtt:DetachFile() THEN BREAK
                ENDIF
            ENDDO

            FOR j = 1 TO LEN( aPar )
                WHILE ( oAtt := aPar[ j ]:NextAttachment() ) != NIL
                    IF !EMPTY( oAtt:GetFileName() )
                        cMsg += CRLF + "Allegato: " + oAtt:GetFileName()
//                        IF !oAtt:DetachFile(); BREAK; ENDIF
                    ENDIF
                ENDDO
            NEXT

            ? cMsg
        NEXT

        lOk = .T.
    CATCH
    END

    IF !EMPTY( oCli ); oCli:Close(); ENDIF

    RETURN lOk


STATIC FUNCTION BODY( aPar )

    LOCAL cMsg := ""

    LOCAL i

    FOR i = 1 TO LEN( aPar )
        IF EMPTY( aPar[ i ]:GetFieldPart( "Content-Disposition" ) )
            cMsg += aPar[ i ]:GetBody()
        ENDIF
    NEXT

    RETURN ALLTRIM( cMsg )


EMG
Posts: 340
Joined: Thu Jan 25, 2007 03:53 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 06:24 PM

Grazie Enrico, ma si ferma sull'istruzione:

aMail = oCli:RetrieveAll()

e scarica mega e mega e non esce più !

Scaricherà mica tutta la posta ?

Proverò a lasciarlo acceso tutta la notte e vediamo che succede !

Ciao e buon WE
R

:-(

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 06:32 PM

Certo che scarica tutta la posta! Cosa ti aspettavi, che scaricasse un solo messaggio? Sicuramente si può fare ma non so come. Perché non lo provi con una casella con pochi messaggi?

EMG

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 06:35 PM

E comunque in realtà non scarica niente, ma legge in memoria. Immagino che sia per quello che si blocca. Tieni presente che quello è solo un test dal quale poi uno si sviluppa ciò che gli serve realmente.

In ogni caso, con poche email funziona perfettamente. Ma solo POP3 senza SSL. Per SSL bisogna linkare le librerie OpenSSL ma non ho ancora capito come (vedi altro thread).

EMG

Posts: 340
Joined: Thu Jan 25, 2007 03:53 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 09:12 PM

Ok

Provata su una casella con poche mail e funziona.

Certo che se la casella contiene 10000 msg....... ci vuole un giorno. E poi che senso ha rileggere sempre tutto ?

Mai possibile che non esistono parametri per leggere solo alcune mails, magari per data ricezione ?

Pare imposssibile !

Grazie cmq

A ri-ciao e b we
R

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 10:45 PM

No, il metodo c'è di sicuro. Solo che bisognerebbe studiarsi la classe...

EMG

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Lettura mails
Posted: Fri Jan 25, 2019 10:50 PM
Ho dato uno sguardo e a quanto pare c'è il metodo


Code (fw): Select all Collapse
oMail = oCli:Retrieve( n )


dove n è il numero del messaggio da scaricare e oMail è l'oggetto tramite il quale si può accedere ai campi della email e ai suoi eventuali allegati.

EMG
Posts: 340
Joined: Thu Jan 25, 2007 03:53 PM
Re: Lettura mails
Posted: Sat Jan 26, 2019 07:57 PM

Grande Enrico,

vedi che "ravanando" qualcosa si trova.

Certo, sarebbe "ezzziunale verament" riuscire a legge le PEC..

Ma questa è un'altra storia !

Ciao e buon WE

R

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Lettura mails
Posted: Sat Jan 26, 2019 10:56 PM

Nell'altro thread ho riportato anche la soluzione per leggere le PEC.

EMG

Posts: 340
Joined: Thu Jan 25, 2007 03:53 PM
Re: Lettura mails
Posted: Mon Jan 28, 2019 04:33 PM

Scusa Enrico dovè l'altro thread per leggere le PEC ?

Tks

Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Posts: 340
Joined: Thu Jan 25, 2007 03:53 PM
Re: Lettura mails
Posted: Wed Jan 30, 2019 04:34 PM

Grazie caro,

appena ho una giornata "SI", ci provo !

Saluti

Continue the discussion