FoxPress – Noviembre 2002

 

Envía páginas Web con Chilkasoft

Por  Francisco San Pablo

 

http://www.fpress.com/                                                                                                              SAMPLE2.ZIP

 

 

   Una de las necesidades más perentorias que tiene uno en las aplicaciones suele ser la forma de enviar E-mails.

 

   Desde hace tiempo se han comentado diversas formas de hacerlo en esta revista como los controles de Mabry, el CDONT, etc...

 

   Pero, cuando creía que tenía resuelto este tema, de pronto descubrí que con mi  ‘caja de herramientas de soft’ era incapaz de enviar un E-mail de una página web para que el cliente pueda hacer publicidad de un catálogo de productos con magníficas fotos, etc...

 

   Así fue como me tropecé con los controles de Chilkasoft que  están muy bien dotados y muchos de ellos son gratis (el de mail y de FTP por lo menos) incluso en su uso comercial.

 

   Quizás, querido lector, estarás pensando que tienes este asunto solucionado, pero yo te animaría a que probarás a si tu control es capaz de enviar una página HTML con fotos. Después de que pierdas un poco de tu precioso tiempo te recomendaría que dieras un vistazo a este control gratis para enviar/recibir correo que te permite enviar páginas html con fotos incluidas de una forma fácil

 

   Bueno, en realidad no es tan fácil porque una vez creada la página HTML tienes que coger la cadena de la página e ir localizando cada uno de los gráficos y asignarle un ID. Una vez tienes el ID ya puedes pasarle la cadena a la .OCX de correo.

 

   Te adjunto el código que no es demasiado largo.

 

   Como siempre en esta vida, si te quieres ahorrar el tiempo y el trabajo de hacerlo podrías usar otro control de chilkatsoft (qué nombre tan endiablado) para hacerlo todo con una sola línea de código. Este control es el que llaman ChilKat MHT

 

   Te adjunto un ejemplo de lo anterior, que con sólo copiar y pegar te tiene que funcionar siempre y cuando te hayas bajado el control de http://www.chilkatsoft.com/products.asp . El código es el siguiente.

 

Nota: tienes que personalizar las primeras líneas del programa con los datos de tu servidor de correo, etc...

 

#DEFINE _IMGBMP       "C:\temp\PAPELERA.BMP"

#DEFINE _FILEHTML     "G:\tmp\Boston_com.htm"

 

#DEFINE _TO           "tu-nombre@mi-dominio.com"

#DEFINE _TONAME       "Pepito Grillo"

#DEFINE _FROM         "gbush@casablanca.com"

#DEFINE _FROMNAME     "george"

 

#DEFINE _HOST         "usa.com"     && Hay que poner el SERVIDOR SMTP

#DEFINE _USR          "bylly"       && Usuario

#DEFINE _PASW         "1234"         && Password

 

********************************************************************

* IMPORTANTE: ACTUALIZAR LOS DEFINE PARA QUE FUNCIONE EL EJEMPLO   *

********************************************************************

 

*- Si no tiene HOST, usuario ó PASSW

IF EMPTY(_HOST) OR EMPTY(_USR) OR EMPTY(_PASW)

  MESSAGEBOX('Debe especificar Servidor SMTP, usuario y password', 64, 'Atención')

  RETURN .F.

ENDIF

 

*- Crea instancia del control

mailman = CreateObject("ChilkatMail.ChilkatMailMan")

 

*- Código de desbloqueo

mailman.UnlockComponent("BaldEagle")

 

*- Carga el log y lo limpia

mailmanLog = mailman.GetLog()

mailmanLog.ClearLog

 

*- Host SMTP, Usuario y Clave

mailman.SmtpHost      = _HOST

mailman.SmtpUsername= _USR

mailman.SmtpPassword= _PASW

 

*- Crea el mensaje de e-mail

email = CreateObject("ChilkatMail.ChilkatEmail")

 

*- Para

email.AddTo(_TONAME, _TO)

 

*- De

email.FromName = _FROMNAME

email.FromAddress = _FROM

 

*- subject

email.Subject = [E-mail enviado con una utilidad de http://www.chilkatsoft.com]

 

*- Para Attach

*email.AddFileAttachment("c:\temp\lash.htm")

*email.AddFileAttachment("c:\temp\form1.scx")

 

 

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

*- Enviar una página HTML

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

 

email.AddHtmlAlternativeBody( lfObtenerHtml(_FILEHTML, email) )

 

 

*- Envía el e-mail

lnEnv = mailman.SendEmail(email)

 

IF lnEnv = 1

  MESSAGEBOX("El mensaje ha sido enviado correctamente")

else

  MESSAGEBOX("ERROR: El mensaje no ha sido enviado")

endif

 

*!*      Para ver un log de lo enviado

*!*      mailmanLog.IsHTML = .T.

*!*      mailmanLog.LineFormat = "_STANDARD_"

*!*      mailmanLog.SetNamedFormat("Heading","_STANDARD_")

*!*      mailmanLog.SetNamedFormat("Error","_STANDARD_")

*!*      MESSAGEBOX(mailmanLog.GetDebugEntries)

 

************************************************************************************

*

*  Función que recibe como parámetro un fichero HTML y una referencia la objeto e-mail

*  y devuelve una cadena que contiene el código HTM y las referencias a las

*  imágenes de la página.

*

************************************************************************************

FUNCTION lfObtenerHtml

LPARAMETERS pFichHtml, poEmail

 

IF NOT FILE(pFichHtml)

  MESSAGEBOX('No se encuentra el fichero ' + pFichHtml, 16, 'Atención')

  RETURN ""

ENDIF

 

LOCAL lcCadenaHtml

lcCadenaHtml = FILETOSTR(pFichHtml)

 

*- Actualiza distintas sintaxis

lcCadenaHtml = STRTRAN(lcCadenaHtml, 'src =','src=')

 

LOCAL lnOcurre, lnPosAt, lcDelimitador, lcFileImg, imageContentID, ;

  lcCadIzd, lcCadCent, lcCadDer

 

lnOcurre = 1

lnPosAt = ATC("src=", lcCadenaHtml, lnOcurre)

 

DO WHILE lnPosAt > 0

        

  lcFileImg = ""

 

  *- Obtiene el delimitador de la imagen   " ó '

  lcDelimitador = SUBSTR(lcCadenaHtml, lnPosAt+4,1)

 

  FOR lnCont = lnPosAt+5 TO LEN(lcCadenaHtml)

         lcChar = SUBSTR(lcCadenaHtml, lnCont,1)

        

         *- Si ha encontrado el siguiente delimitador (cierre)

         IF lcChar = lcDelimitador

               EXIT

         ENDIF

 

         *- Cambia el separador de directorios          

         lcChar = STRTRAN(lcChar, '/', '\')

        

         lcFileImg = lcFileImg + lcChar

  ENDFOR

 

  *- Obtiene el path de la imagen, relativa al fichero HTML

  lcFileImg = FULLPATH(lcFileImg, pFichHtml)

 

  IF FILE(lcFileImg)

         *- Obtiene código de la imagen embebida

         imageContentID = poEmail.AddRelatedContent(lcFileImg)

        

         lcCadIzd      = LEFT(lcCadenaHtml, lnPosAt-1)

         lcCadCent     = "src=cid:"+imageContentID

         lcCadDer      = SUBSTR(lcCadenaHtml, lnCont+1)

        

         *- Compone la cadena a devolver

         lcCadenaHtml = lcCadIzd + lcCadCent + lcCadDer

  ENDIF

 

  *- Aumenta para buscar la siguiente imagen

  lnOcurre = lnOcurre + 1

  lnPosAt = ATC("src=", lcCadenaHtml, lnOcurre)

ENDDO

 

RETURN (lcCadenaHtml)

 

 

 

 

 

FoxPress – Noviembre de 2002

© 2002 FoxPress. All rights reserved