Envía páginas Web con Chilkasoft
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