2015-02-19 13:15 UTC-0800 Pritpal Bedi (bedipritpal/at/hotmail.com)

* contrib/hbtop/popcli.prg
    ! Fixed: METHOD top( nMsgId )
	   ::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0 " + ::cCRLF )
	      =>
	   ::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0" + ::cCRLF )

	+ Added: following convinient methods:
       METHOD getTop( nMsgId, lAsArray ) -> arrayOrStringOfHeaderOF_nMsgId
       METHOD getMessageRaw( nMsgId, lAsArray ) -> arrayOrStringOfEntireMessageOF_nMsgId
       METHOD getBody( nMsgId, lAsArray ) -> arrayOrStringOfMessageBodyOF_nMsgId
       METHOD getSubject( nMsgId ) -> cSubjectLineOF_nMsgId
This commit is contained in:
Pritpal Bedi
2015-02-19 13:24:04 -08:00
parent 6aa7e9423c
commit fdb77bb7f2
2 changed files with 143 additions and 3 deletions

View File

@@ -10,7 +10,20 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2015-02-19 01:19 UTC-0800 Pritpal Bedi (bedipritpal/at/hotmail.com)
2015-02-19 13:15 UTC-0800 Pritpal Bedi (bedipritpal/at/hotmail.com)
* contrib/hbtop/popcli.prg
! Fixed: METHOD top( nMsgId )
::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0 " + ::cCRLF )
=>
::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0" + ::cCRLF )
+ Added: following convinient methods:
METHOD getTop( nMsgId, lAsArray ) -> arrayOrStringOfHeaderOF_nMsgId
METHOD getMessageRaw( nMsgId, lAsArray ) -> arrayOrStringOfEntireMessageOF_nMsgId
METHOD getBody( nMsgId, lAsArray ) -> arrayOrStringOfMessageBodyOF_nMsgId
METHOD getSubject( nMsgId ) -> cSubjectLineOF_nMsgId
2015-02-19 13:09 UTC-0800 Pritpal Bedi (bedipritpal/at/hotmail.com)
* contrib/gtwvg/gtwvgd.c
* contrib/gtwvg/gtwgud.c
! Fixed: a bug which was causing HB_GTI_SETPOS_XY/ROWCOL returning

View File

@@ -77,6 +77,11 @@ CREATE CLASS TIPClientPOP FROM TIPClient
METHOD Read( nLen )
METHOD retrieveAll( lDelete )
METHOD getTop( nMsgId, lAsArray )
METHOD getMessageRaw( nMsgId, lAsArray )
METHOD getBody( nMsgId, lAsArray )
METHOD getSubject( nMsgId )
ENDCLASS
METHOD New( oUrl, xTrace, oCredentials ) CLASS TIPClientPOP
@@ -212,6 +217,7 @@ METHOD Retrieve( nId, nLen ) CLASS TIPClientPOP
ENDIF
cRet := ""
nRetLen := 0
/* 2004-05-04 - <maurilio.longo@libero.it>
Instead of receiving a single char at a time until after we have the full mail, let's receive as
@@ -269,7 +275,7 @@ METHOD Top( nMsgId ) CLASS TIPClientPOP
LOCAL nPos
LOCAL cStr, cRet
::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0 " + ::cCRLF )
::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0" + ::cCRLF )
IF ! ::GetOk()
RETURN NIL
ENDIF
@@ -378,7 +384,7 @@ METHOD Read( nLen ) CLASS TIPClientPOP
RETURN ::Retrieve( Val( ::oUrl:cFile ), nLen )
METHOD retrieveAll( lDelete )
METHOD retrieveAll( lDelete ) CLASS TIPClientPOP
LOCAL aMails, i, imax, cMail
@@ -405,3 +411,124 @@ METHOD retrieveAll( lDelete )
NEXT
RETURN aMails
/*----------------------------------------------------------------------*/
// Pritpal Bedi 20Oct2013
/*----------------------------------------------------------------------*/
METHOD getTop( nMsgId, lAsArray ) CLASS TIPClientPOP
LOCAL nPos, cStr, xRet
::inetSendAll( ::SocketCon, "TOP " + hb_ntos( nMsgId ) + " 0" + ::cCRLF )
IF ! ::GetOk()
RETURN NIL
ENDIF
hb_default( @lAsArray, .F. )
xRet := iif( lAsArray, {}, "" )
DO WHILE ! ( cStr == "." ) .AND. ::inetErrorCode( ::SocketCon ) == 0
cStr := ::inetRecvLine( ::SocketCon, @nPos, 1024 )
IF ! ( cStr == "." )
IF lAsArray
AAdd( xRet, cStr )
ELSE
xRet += cStr + ::cCRLF
ENDIF
ENDIF
ENDDO
RETURN xRet
METHOD getMessageRaw( nMsgId, lAsArray ) CLASS TIPClientPOP
LOCAL cLine, nBytes, xRet
::inetSendAll( ::SocketCon, "RETR " + hb_ntos( nMsgId ) + ::cCRLF )
IF ! ::GetOk()
RETURN NIL
ENDIF
hb_default( @lAsArray, .F. )
xRet := iif( lAsArray, {}, "" )
DO WHILE ::inetErrorCode( ::SocketCon ) == 0
cLine := ::inetRecvLine( ::SocketCon, @nBytes, 8192 )
IF nBytes <= 0
EXIT
ENDIF
IF cLine == "."
EXIT
ENDIF
IF lAsArray
AAdd( xRet, cLine )
ELSE
xRet += cLine + ::cCRLF
ENDIF
ENDDO
RETURN xRet
METHOD getBody( nMsgId, lAsArray ) CLASS TIPClientPOP
LOCAL xRet, n, n1, i, nBoundry, cBoundary
LOCAL aMsg := ::getMessageRaw( nMsgId, .T. )
IF Empty( aMsg )
RETURN NIL
ENDIF
hb_default( @lAsArray, .F. )
xRet := iif( lAsArray, {}, "" )
IF ( nBoundry := AScan( aMsg, { | cLine | n1 := At( "boundary=", Lower( cLine ) ), n1 > 0 } ) ) > 0
cBoundary := SubStr( aMsg[ nBoundry ], n1 + 1 )
cBoundary := AllTrim( StrTran( cBoundary, '"', "" ) )
ENDIF
IF ! Empty( cBoundary )
n := AScan( aMsg, { | cLine | cBoundary $ cLine }, nBoundry + 1 )
IF n > 0
n1 := AScan( aMsg, { | cLine | cBoundary $ cLine }, n + 1 )
IF n1 > 0 // This must not happen, but
FOR i := n + 3 TO n1 - 1
IF lAsArray
AAdd( xRet, aMsg[ i ] )
ELSE
xRet += aMsg[ i ] + ::cCRLF
ENDIF
NEXT
ENDIF
ENDIF
ELSE
n := AScan( aMsg, { | cLine | Empty( cLine ) } )
IF n > 0
FOR i := n + 1 TO Len( aMsg )
IF lAsArray
AAdd( xRet, aMsg[ i ] )
ELSE
xRet += aMsg[ i ] + ::cCRLF
ENDIF
NEXT
ENDIF
ENDIF
RETURN xRet
METHOD getSubject( nMsgId ) CLASS TIPClientPOP
LOCAL cHeader
LOCAL aTop := ::getTop( nMsgId, .T. )
FOR EACH cHeader IN aTop
IF Lower( Left( cHeader, 9 ) ) == "subject: "
RETURN SubStr( cHeader, 10 )
ENDIF
NEXT
RETURN NIL