FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Leer mail con adjunto.
Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM
Leer mail con adjunto.
Posted: Mon Oct 08, 2012 08:34 AM

Hola a todos,

驴Alguien tiene una rutina para leer el mail de una cuenta de correo y extraer de 茅l el fichero adjunto que lleva?

Gracias,

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Leer mail con adjunto.
Posted: Mon Oct 08, 2012 09:28 AM

Hombre, eso va a depender del cliente de correo que utilizas. Si utilizas Microsoft Outlook eso se puede hacer facilmente. Si utilizas correos Web entonces NPI.

Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM
Re: Leer mail con adjunto.
Posted: Mon Oct 08, 2012 09:43 AM
hmpaquito wrote:Hombre, eso va a depender del cliente de correo que utilizas. Si utilizas Microsoft Outlook eso se puede hacer facilmente. Si utilizas correos Web entonces NPI.


La idea era atacar directamente el servidor de correo; pero si se pudira usando Windows Live Mail pues m谩s vale eso que nada.

Gracias.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: Leer mail con adjunto.
Posted: Mon Oct 08, 2012 12:19 PM
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM
Re: Leer mail con adjunto.
Posted: Mon Oct 08, 2012 06:41 PM

Bueno,

He estado mirando los post de este foros y las clases TSmpt, TPop3 y TMail que trae Fivewin, y no acabo de ver como poder leer los ficheros adjuntos de un mail recibido.

驴Nadie ha tenido esta necesidad?

驴C贸mo podemos capturar un fichero que hemos recibido en un mail?

Gracias.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Leer mail con adjunto.
Posted: Tue Oct 09, 2012 05:02 PM
FiveWidi,

Te adjunto un c贸digo que forma parte de un sistema de bajada de correo automatico desde MsOutlook y manipulaci贸n del mismo. No es compilable tal cual, pero con pocos cambios lo pones a funcionar.

Code (fw): Select all Collapse
//-------------------------------------------------------------------------//
STATIC FUNCTION Contar(oPid)
Local nI, nJ
//Local oLeidos
Local cPathFileName, cFileName
Local oItem, oAttachment
Local aExcel:= {}, aWord:= {}
Local lHayXls, lHayWord
Local nPtesExcel:= 0
Local nPtesWord := 0
Local loApplication, lonamespace, loinbox, lncontador
Local lError
*
*
*
lError:= .f.
DO WHILE .T.
   loApplication:= ServerOutLook()
   IF loApplication == NIL
      MERROR_("(1) Se produjo un error !!", "Cierre MS-OutLook",;
              ole2txterror(), loApplication)
      LOOP
   ENDIF

   TRY
      loNameSpace   = loApplication:GetNameSpace("MAPI")
      TRY
         lonamespace:logon()
      CATCH

         MERROR_("(3) Se produjo un error !!", "Cierre MS-OutLook",;
                 ole2txterror(), lonamespace)
         lError:= .t.
      END
   CATCH
      MERROR_("(2) Se produjo un error !!", "Cierre MS-OutLook",;
              ole2txterror(), lonamespace)
      loApplication:Quit()
      lError:= .t.
   END
   IF !lError
      EXIT
   ENDIF
ENDDO


loInbox       = loNameSpace:GetDefaultFolder(6)

FOR lnContador:= 1 TO loInbox:items:Count

   oItem:= loinbox:items(lncontador)
   lHayXls:= .f.
   lHayWord:= .f.
   FOR nJ:= 1 TO oItem:attachments:Count
      oAttachment:= oitem:attachments:item(nJ)
      cFileName:= Upper(oAttachment:FileName)
      DO CASE
         CASE Right(cFileName, 4) == ".XLS"
            nPtesExcel++
         CASE Right(cFileName, 4) == ".RTF" .AND. "PEDIDO" $ cFileName
            nPtesWord++
      ENDCASE
   NEXT
   oItem:Close(0)
NEXT
lonamespace:logoff()
*
oPid:oVarExt:nPtesExcel:= nPtesExcel
oPid:oVarExt:nPtesWord := nPtesWord
*
RETURN NIL
*
//-------------------------------------------------------------------------//
STATIC FUNCTION ServerOutLook()
Local oServer
DO WHILE .t.

   TRY
      oServer:= GetActiveObject( "Outlook.Application" )
   CATCH
      TRY
          oServer:= CreateObject( "Outlook.Application" )
      CATCH
          oServer:= NIL
      END
   END
   EXIT
ENDDO
RETURN oServer
//-------------------------------------------------------------------------//
STATIC FUNCTION Imprimir(oPid)

Local nI, nJ, nK
Local oLeidos
Local cPathFileName, cFileName
Local oItem, oItem2, oAttachment
Local aExcel:= {}, aWord:= {}
Local lHayXls, lHayWord
Local loApplication, lonamespace, loinbox, lncontador
Local oSalida
Local aNames
*
IF oPid:oVarExt:lDentroImpresion
   RETURN NIL
ENDIF
oPid:oVarExt:lDentroImpresion:= .t.
*
TRY
   loApplication:= GetActiveObject( "Outlook.Application" )
CATCH
   TRY
       loApplication:= CreateObject( "Outlook.Application" )
   CATCH
       MERROR_( "Error !!! No esta instalado OutLook !!!", OLE2TXTERROR() )
   END
END

loNameSpace   = loApplication:GetNameSpace("MAPI")
lonamespace:logon()
loInbox       = loNameSpace:GetDefaultFolder(6)


oLeidos:= OutLookOpenCarpetaLeidos(loNameSpace)

oSalida:= loNameSpace:GetDefaultFolder(5)


FOR lnContador:= 1 TO loInbox:items:Count

   oItem:= loinbox:items(lncontador)
   lHayXls:= .f.
   lHayWord:= .f.
   aNames:= {}
   FOR nJ:= 1 TO oItem:attachments:Count
      oAttachment:= oitem:attachments:item(nJ)
      cFileName:= Upper(oAttachment:FileName)
      Aadd(aNames, oAttachment:FileName)
      DO CASE
         CASE Right(cFileName, 4) == ".XLS"
            cFileName:= StrTran(cFileName, Space(1), "") // Espacios de nombres largos
            // Le cambiamos el nombre por uno random pq las xls probablemente
            // tengan todas el mismo nombre.
            cPathFileName:= RandomFiGral(Left(cFileName, 4), ".xls", "Tmp")
            cPathFileName:= PathCompleto(cPathFileName)
            *
            oAttachment:SaveAsFile(cPathFileName)
            lHayXls:= .t.
            Aadd(aExcel, cPathFileName)
         CASE Right(cFileName, 4) == ".RTF" .AND. "PEDIDO" $ cFileName
            cFileName:= StrTran(cFileName, Space(1), "") // Espacios de nombres largos
            // Le cambiamos el nombre por uno random pq las xls probablemente
            // tengan todas el mismo nombre.
            cPathFileName:= RandomFiGral(Left(cFileName, 4), ".rtf", "Tmp")
            cPathFileName:= PathCompleto(cPathFileName)
            *
            oAttachment:SaveAsFile(cPathFileName)
            lHayWord:= .t.
            Aadd(aWord, cPathFileName)
      ENDCASE
   NEXT
   IF lHayXls .OR. lHayWord
      IF oPid:oVarExt:cAviRPC == "S"
         oItem2:= oItem:forward()
         *
         oItem2:To:= oItem2:SenderEmailAddress
         oItem2:Subject:= oemtoansi("Confirmado recepci垄n de su pedido "+;
                                     Arr2Cad(aNames))
         FOR nK:= 1 TO oItem2:attachments:Count
            oItem2:attachments:Remove(nK)
            nK--
         NEXT
         *
         oItem2:Send() //Move(oSalida)
      ENDIF
      oItem:Move(oLeidos)
      lnContador--           // importante: para que no se salte pq he movido el actual.
   ENDIF
   oItem:Close(0)
   *
   SysRefresh()
NEXT
lonamespace:logoff()
IF .t.
IF !Empty(aExcel)
   PrintExcel(aExcel)
ENDIF
IF !Empty(aWord)
   PrintWord(aWord)
ENDIF
ENDIF
oPid:oVarExt:lDentroImpresion:= .f.
RETURN NIL
*


//-------------------------------------------------------------------------//
STATIC FUNCTION PrintExcel(aFiles)
Local oExcel
Local nI
Local oBook
*
TRY
   oExcel:= GetActiveObject( "Excel.Application" )
CATCH
   TRY
       oExcel:= CreateObject( "Excel.Application" )
   CATCH
       MERROR_( "Error !!! No esta instalado Excel !!!", OLE2TXTERROR() )
   END
END

oExcel:Visible:= .f.
FOR nI:= 1 TO Len(aFiles)
   oExcel:WorkBooks:Open(aFiles[nI])
   oExcel:ActiveSheet:PrintOut()
   oExcel:WorkBooks:Close()
   DELETE FILE (aFiles[nI])
NEXT
oExcel:Quit()
RETURN NIL
*
//-------------------------------------------------------------------------//
STATIC FUNCTION PrintWord(aFiles)
Local oWord
Local nI
*
TRY
   oWord:= GetActiveObject( "Word.Application" )
CATCH
   TRY
       oWord:= CreateObject( "Word.Application" )
   CATCH
       MERROR_( "Error !!! No esta instalado Word !!!", OLE2TXTERROR() )
   END
END

oWord:Visible := .F.
FOR nI:= 1 TO Len(aFiles)
   oWord:Documents:Open(aFiles[nI])
   oWord:PrintOut()
   oWord:Documents:Close()
   DELETE FILE (aFiles[nI])
NEXT
oWord:Quit()
*
RETURN NIL
*

*
//-------------------------------------------------------------------------//
STATIC FUNCTION OutLookOpenCarpetaLeidos(loNameSpace)
Local oLeidos, oPersonales
oPersonales:= loNameSpace:Folders(1)

IF !OutLookExisteFolderPersonal(loNameSpace, CARPETA_LEIDOS)
   opersonales:folders:Add(CARPETA_LEIDOS)
ENDIF
oLeidos:= oPersonales:Folders(CARPETA_LEIDOS)

RETURN oLeidos
*
//-------------------------------------------------------------------------//
STATIC FUNCTION OutLookExisteFolderPersonal(loNameSpace, cFolder)
Local nI, oPersonales, lExiste:= .f.
Local oLeidos
oPersonales:= loNameSpace:Folders(1) //GetDefaultFolder(6)
FOR nI:= 1 to oPersonales:folders:Count
   oLeidos:= oPersonales:Folders(nI)
   IF oLeidos:Name == CARPETA_LEIDOS
      lExiste:= .t.
      EXIT
   ENDIF
NEXT
RETURN lExiste
*
*



Saludos
Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM
Re: Leer mail con adjunto.
Posted: Tue Oct 09, 2012 06:19 PM
hmpaquito wrote:FiveWidi,

Te adjunto un c贸digo que forma parte de un sistema de bajada de correo automatico desde MsOutlook y manipulaci贸n del mismo. No es compilable tal cual, pero con pocos cambios lo pones a funcionar.

Saludos


Much铆simas gracias.

Es un buen punto de partida.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 408
Joined: Fri Jan 29, 2010 08:14 PM
Re: Leer mail con adjunto.
Posted: Tue Oct 09, 2012 11:07 PM
Hola FiveWidi:

En las contribuciones de Harbour tienes como hacer lo que quieres, los ejemplos est谩 en:

Code (fw): Select all Collapse
C:\harbour-3.0.0\contrib\hbtip


Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
Posts: 1446
Joined: Mon Oct 10, 2005 02:38 PM
Re: Leer mail con adjunto.
Posted: Thu Oct 11, 2012 08:07 AM

Hola a todos,

En el Hasrbour que trae FiveWin no viene C:\harbour-3.0.0\contrib\hbtip

驴 Por favor, quien me lo puede enviar ?

A este mail siperono@gelbla.com

Gracias.

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Continue the discussion