hb_SendMail() - excel adjuntos

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

hb_SendMail() - excel adjuntos

Post by edufloriv »

Saludos amigos,

Note un problema con la función hb_sendmail() que creo ya todos conocemos:

Code: Select all

*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------

PROC CierreCorreoEnviar

LOCAL cPopServer    := "mail.miserver.com.pe"
LOCAL cSMTPServer   := "mail.miserver.com.pe"
LOCAL cUser         := "miusuario"
LOCAL cSMTPPassWord := "miclave"
LOCAL cFrom         := "micorreo@miserver.com.pe"
LOCAL aTo           := {'edufloriv@gmail.com'}
LOCAL aFiles        := {}
LOCAL cSubject      := 'CIERRE DE VENTAS '+UPPER(cMesNom)+' '+cAnual
LOCAL cBody         := ''
LOCAL cFecHoy       := DTOC(GetFecServ())

   cAnualMes  := Win_VentasCorreo.TxtAnualMes.Value
   cAnual     := LEFT( cAnualMes , 4 )
   cMesChr    := RIGHT( cAnualMes , 2 )
   cMesNom    := SYS_MESES[ VAL(cMesChr) ]

   cExcelFold := 'D:\MisDocumentos\CIERRES\'+cAnual
   cRepoCier  := 'Cierre_Ventas_Mensual_'+cAnualMes+'.xls'  // Este excel pesa 131 KB
   cRepoAnal  := 'Analisis_Por_Cliente_'+cAnualMes+'.xls'      // Este excel pesa 366 KB
   cRepoAnos  := 'Ventas Comparativo Anual.xls'                  // Este excel pesa 91 KB
   cExcelCier := cExcelFold+'\'+cRepoCier
   cExcelAnal := cExcelFold+'\'+cRepoAnal
   cExcelAnos := cExcelFold+'\'+cRepoAnos

   IF .NOT. FILE( cExcelCier )
      MsgInfo('Falta el reporte de cierre de mes.')
      RETURN
   ENDIF
   IF .NOT. FILE( cExcelAnal )
      MsgInfo('Falta el reporte de análisis por cliente.')
      RETURN
   ENDIF
   IF .NOT. FILE( cExcelAnos )
      MsgInfo('Falta el reporte comparativo por años.')
      RETURN
   ENDIF
   
   Win_VentasCorreo.TxtProgreso.Value := 'Enviando reportes por correo...'

   cBody := 'Se remite el cierre de ventas del mes de '+cMesNom+' del '+cAnual+;
            REPL(chr(13)+chr(10),10)+;
            'SisComFar'+chr(13)+chr(10)+;
            'Sistema automático de informes'

   aFiles := { cExcelAnal } //cExcelCier , cExcelAnos ,  // <--- AQUI JUEGO CON LOS ADJUNTOS :
                                                      // CUANDO PONGO LOS 3 EXCEL NO LLEGA NADA AL CORREO DESTINO
                                                     // CUANDO PONGO LOS 2 MAS CHICOS SI LLEGA NORMAL
                                                    // CUANDO PONGO SOLO EL MAS GRANDE SI LLEGA NORMAL

   lRespuesta := hb_SendMail( ;
                  cSMTPServer,;              // Servidor
                  25 ,;                      // Puerto
                  cFrom,;                    // From
                  aTo,;                      // To
                  NIL ,;                     /* CC */
                  NIL ,;                     /* BCC */
                  cBody ,;                   // Body
                  cSubject ,;                // Subject
                  aFiles ,;                  // aFiles attached
                  cFrom ,;                   // User   (obligatorio)
                  cSMTPPassword,;            // Pass (obligatorio)
                  cPopServer,;               // POP Server (obligatorio)
                  3 ,;                       /* nPriority */
                  .F. ,;                     /* lRead */
                  .F. ,;                     /* lTrace */
                  .T. ,;                     /* lPopAuth */
                  .F. ,;                     /* lNoAuth */
                  NIL ,;                     /* nTimeOut */
                  NIL ,;                     /* cReplyTo */
                  .F. ,;                     /* lTLS */
                  cSMTPPassWord )

   MsgInfo('Reportes enviados.')

RETURN
Debo enviar por correo 3 hojas de excel:

cRepoCier := 'Cierre_Ventas_Mensual_'+cAnualMes+'.xls' // Este excel pesa 131 KB
cRepoAnal := 'Analisis_Por_Cliente_'+cAnualMes+'.xls' // Este excel pesa 366 KB
cRepoAnos := 'Ventas Comparativo Anual.xls' // Este excel pesa 91 KB

Hago 3 pruebas de envio y tengo este resultado en mi bandeja de destino (en ningún caso sale error alguno):

1. CUANDO PONGO LOS 3 EXCEL NO LLEGA NADA AL CORREO DESTINO
2. CUANDO PONGO LOS 2 MAS CHICOS (131 KB y 91 KB ) SI LLEGA NORMAL
3. CUANDO PONGO SOLO EL MAS GRANDE (366 KB) SI LLEGA NORMAL

Si envio los 3 excel desde mi cliente de correo MOZILLA THUNDERBIRD, llegan normal. Sospecho que se puede tratar del tiempo de espera que se demora la función hb_sendmail() en cargar los archivos excel, tal vez tiene un límite que al ser tocado aborta el envio, pero no sale error alguno, en las tres pruebas siempre termina lanzando el mensaje "Reportes enviados." - De ser así hay forma de cambiar este parametro de tiempo de espera ?

Agradeceré su ayuda y valioso tiempo amigos. Desde ya un saludo cordial a todos.


Att.


HMG 3.0.46

Eduardo Flores Rivas


LIMA - PERU
User avatar
danielmaximiliano
Posts: 2625
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: hb_SendMail() - excel adjuntos

Post by danielmaximiliano »

Hola Edu :

este codigo pertenece a la funcion Sendmail()

Code: Select all

 IF Len( aThisFile ) >= 3 .AND. HB_ISSTRING( aThisFile[ 3 ] )
ahi refiere al "tipo" de contenido de adjuntos, una "mirada" mas profunda para ver que sucede con 3 adjuntos para corregir "problema" con tus correos..

seria mas facil que hagas una rutina de envio con 2 archivos y los siguientes en un segundo email.
slds (voy a ver si es problema se puede arreglar en la semana ya que sabado, domingo y lunes tengo ocupado.

Code: Select all

 oMail := TIPMail():New()
   oMail:SetEncoder( cEncoding )
   oMail:SetCharset( cCharset )
   IF Empty( aFiles )
      oMail:hHeaders[ "Content-Type" ] := cContentType
      oMail:SetBody( cBody )
   ELSE
      oAttach := TIPMail():New()
      oAttach:SetEncoder( cEncoding )
      oAttach:SetCharset( cCharset )
      oAttach:hHeaders[ "Content-Type" ] := cContentType
      oAttach:SetBody( cBody )
      oMail:Attach( oAttach )

      FOR EACH aThisFile IN aFiles

         cMimeType := NIL
         nAttr := 0

         IF HB_ISSTRING( aThisFile )
            cFile := aThisFile
            cData := hb_MemoRead( cFile )
            hb_FGetAttr( cFile, @nAttr )
         ELSEIF HB_ISARRAY( aThisFile ) .AND. Len( aThisFile ) >= 2
            cFile := aThisFile[ 1 ]
            IF HB_ISSTRING( aThisFile[ 2 ] )
               cData := aThisFile[ 2 ]
               hb_default( @cFile, "unnamed" )
            ELSEIF HB_ISSTRING( cFile )
               cData := hb_MemoRead( cFile )
               hb_FGetAttr( cFile, @nAttr )
            ELSE
               LOOP  /* No filename and no content. */
            ENDIF
            IF Len( aThisFile ) >= 3 .AND. HB_ISSTRING( aThisFile[ 3 ] )
               cMimeType := aThisFile[ 3 ]
            ENDIF
         ELSE
            LOOP
         ENDIF

         IF cMimeType == NIL
            cMimeType := tip_FileNameMimeType( cFile, "application/octet-stream" )
         ENDIF
         cFile := s_TransCP( cFile, cCharsetCP )

         oAttach := TIPMail():New()
         oAttach:SetCharset( cCharset )
         oAttach:SetEncoder( iif( hb_LeftEq( cMimeType, "text/" ), cEncoding, "base64" ) )

         IF cMimeType == "text/html"
            cMimeType += "; charset=" + cCharset
            IF !( Right( cData, 2 ) == Chr( 13 ) + Chr( 10 ) )
               cData += Chr( 13 ) + Chr( 10 )
            ENDIF
         ENDIF
         // Some e-mail clients use Content-Type to check for filename
         cMimeType += "; name=" + '"' + hb_FNameNameExt( cFile ) + '"'
         IF ( nAttr := __tip_FAttrToUmask( nAttr ) ) != 0
            cMimeType += "; x-unix-mode=" + '"' + hb_NumToHex( nAttr, 4 ) + '"'
         ENDIF
         oAttach:hHeaders[ "Content-Type" ] := cMimeType
         // Usually, original filename is set here
         oAttach:hHeaders[ "Content-Disposition" ] := "attachment; filename=" + '"' + hb_FNameNameExt( cFile ) + '"'
         oAttach:SetBody( cData )
         oMail:Attach( oAttach )
      NEXT
   ENDIF
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
danielmaximiliano
Posts: 2625
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Contact:

Re: hb_SendMail() - excel adjuntos

Post by danielmaximiliano »

otra opcion rapida seria que "Comprimas" enu .zip o .rar los archivos y asi consumir menos conexion de datos.
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Re: hb_SendMail() - excel adjuntos

Post by edufloriv »

Daniel,

Genial. Ya sospechaba que se trataba de algo en las entrañas de hb_SendMail(). Ok, voy a optar por la opción de enviar en otro correo, ya que los usuarios destino no son muy diestros con el tema de los comprimidos y creo que se me va a hacer más complicado explicarles que tienen que descomprimir un .zip.

Muchas gracias por tu oportuna respuesta amigo.

Un abrazo.

Eduardo Flores Rivas


LIMA - PERU
Post Reply