http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,def9a19f-04ab-46ff-8421-f700822f1773.aspx
Autor: Craig Boyd
Traducido por: Ana María Bisbé York
Como hemos visto en las entradas previas de esta serie, el envío de correo electrónico con VFP puede realizarse de varias maneras. En esta entrada, voy a mostrar el empleo de un control ActiveX gratuito, que está disponible y es conocido simplemente como EsSmtp. Este control se vendió por Eurosource (http://www.eurosource.se); pero ahora se encuentra en SourceForge (http://sourceforge.net/projects/activex). No sólo es gratis, sino que es de código abierto. Hay algunos controles disponibles; pero con el único que estoy familiarizado es con EsSmtp. Necesitará descargar y registrar este control para que el ejemplo trabaje. Puede descargarlo aquí: http://sourceforge.net/project/showfiles.php?group_id=47048. Y encontrar información adicional aquí: http://activex.sourceforge.net/essmtp.html.
Bien, sin más dilación, he aquí el código.
*******************************
*!* Ejemplo de utilización de SendViaEsSmtp
*******************************
DIMENSION aryAttach(2)
aryAttach(1) = "C:\attachment1.txt" && cambie a un archivo real que existe en su PC
aryAttach(2) = "C:\attachment2.zip" && cambie a un archivo real que existe en su PC
LOCAL lcFromName, lcFromAddress, lcTo, lcSubject, lcBody, lcCC, lcBCC, lcSMTPServer, lcErrReturn
lcFromName = "Mi Nombre"
lcFromAddress = "yo@midominio.com"
lcTo = "alguien@sudominio.com"
lcSubject = "Hey ¿Ha intentado enviar un email con VFP?"
lcBody = ""Quiero hacerle saber que VFP es muy versátil y hay muchas formas de enviar un email."
lcCC = "otro@sudominio.com"
lcBCC = "mijefe@dominiodeljefe.com"
lcSMTPServer = "mail.myhost.com"
SendViaEsSmtp(@lcErrReturn, lcFromName, lcFromAddress, lcTo, lcSubject, lcBody, @aryAttach, lcCC, lcBCC, lcSMTPServer)
IF EMPTY(lcErrReturn)
MESSAGEBOX("'" + lcSubject + "' se envió satisfactoriamente.", 64, "Envía email via EsSmtp")
ELSE
MESSAGEBOX("'" + lcSubject + "' falló al enviar. Causa:" + CHR(13) + lcErrReturn, 64, "Envía email via EsSmtp")
ENDIF
*******************************************
PROCEDURE SendViaEsSmtp(tcReturn, tcFromName, tcFromAddress, tcTo, tcSubject, tcBody, taFiles, tcCC, tcBCC, tcSMTPSever)
*******************************************
LOCAL loEsSmtp, lnCountAttachments, lnErrorNo
TRY
loEsSmtp = CREATEOBJECT("ESSMTP.EsSmtpCtrl.1")
WITH loEsSmtp
IF TYPE("tcSMTPSever") = "C"
.SMTPServer = tcSMTPSever
ENDIF
IF TYPE("tcFromName") = "C"
.SourceName = tcFromName
ENDIF
IF TYPE("tcFromAddress") = "C"
.SourceAddress = tcFromAddress
ENDIF
.DestinationAddress = tcTo
IF TYPE("tcCC") = "C"
.CCDestinationAddress = tcCC
ENDIF
IF TYPE("tcBCC") = "C"
.BCCDestinationAddress = tcBCC
ENDIF
.Subject = tcSubject
.MailData = tcBody
IF TYPE("taFiles", 1) = "A"
FOR lnCountAttachments = 1 TO ALEN(taFiles)
.AddAttachment(taFiles(lnCountAttachments), 0) && 0 significa codificar a base64 si es necesario
ENDFOR
ENDIF
IF .SendMail() != 1 && hubo un problema
lnErrorNo = .ErrorNo
DO CASE
CASE lnErrorNo = 421
THROW "El servicio no está disponible, cerrando el canal de transmisión"
CASE lnErrorNo = 450
THROW "No se realizó la acción requerida: buzón no disponible [Por ejemplo, buzón lleno]"
CASE lnErrorNo = 451
THROW "Ha abortado la acción requerida: hubo error local al procesar"
CASE lnErrorNo = 452
THROW "No se realizó la acción requerida: hay insuficiente capacidad de almacenado del sistema"
CASE lnErrorNo = 500
THROW "Error de sintaxis, comando irreconocible [Puede incluir errores del tipo: línea demasiado larga]"
CASE lnErrorNo = 501
THROW "Error de sintaxis en los parámetros o argumentos"
CASE lnErrorNo = 502
THROW "No se implementó el comando"
CASE lnErrorNo = 503
THROW "Está mal la secuencia de comandos"
CASE lnErrorNo = 504
THROW "No implementado el parámetro del comando"
CASE lnErrorNo = 550
THROW "No se realizó la acción requerida: buzón de correo no disponible [Por ejemplo: no existe, no tiene acceso]"
CASE lnErrorNo = 552
THROW "Ha abortado la acción requerida: excede la capacidad de almacenamiento"
CASE lnErrorNo = 553
THROW "No se realizó la acción requerida: el nombre del buzón no está admitido [Por ejemplo, es incorrecta la sintaxis del buzón]"
CASE lnErrorNo = 554
THROW "Falló la transacción"
OTHERWISE
THROW "Error desconocido - Podría estar relacionado con el WinSock"
ENDCASE
ENDIF
ENDWITH
CATCH TO loError
tcReturn = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
[LineNo: ] + STR(loError.LINENO) + CHR(13) + ;
[Message: ] + loError.MESSAGE + CHR(13) + ;
[Procedure: ] + loError.PROCEDURE + CHR(13) + ;
[Details: ] + loError.DETAILS + CHR(13) + ;
[StackLevel: ] + STR(loError.STACKLEVEL) + CHR(13) + ;
[LineContents: ] + loError.LINECONTENTS
FINALLY
RELEASE loEsSmtp
loEsSmtp = .NULL.
ENDTRY
ENDPROC
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.