jueves, 8 de mayo de 2008

Enviar mail desde vfp

Este código permite enviar mail desde una aplicación visual foxpro utilizando un servidor SMTP que posea autenticación. Hay infinidad de ejemplos y rutinas pero no permiten la autenticación.

Lo que realiza la aplicación es crear un socket de windows y comienza a enviar mensajes al servidor smtp.

Lo interesante de esta rutina es que no se requiere componentes agregados, con los recursos del SO alcanza.

lcServidor = "smtp.server.com"
lcPuerto = 25
lcTo = "aQuienEviar@server.com"
lcFrom = "cuentaOrigen@server.com"
lcSubject= "Prueba"
lcText = "Texto"

lcUsuario = "cuentaOrigen@server.com"
lcPassword = "clave que sea"

#define sckClosed 0
#define sckOpen 1
#define sckListening 2
#define sckConnectionPending 3
#define sckResolvingHost 4
#define sckResolved 5
#define sckConnecting 6
#define sckConnected 7
#define sckClosing 8
#define sckError 9

#DEFINE crlf CHR(13)+CHR(10)

DECLARE integer Sleep IN WIN32API integer && (Aporte realizado en foro fox del MUG. Gracias. PabloC)

oWinsock = CREATEOBJECT("MSWinsock.Winsock.1")
oWinsock.Protocol = 0 && 0=TCP , 1=UDP
oWinsock.RemoteHost = lcServidor
oWinsock.RemotePort = lcPuerto && smtp
oWinsock.Connect()

esperar = 0
DO while oWinsock.State # sckConnected AND esperar <= 10
sleep(500)
esperar = esperar + 1
ENDDO

IF oWinsock.State = sckConnected
oWinsock.senddata("HELO " + oWinsock.RemoteHost + crlf)
sleep(250)
oWinsock.senddata("AUTH LOGIN " + crlf)
sleep(250)
oWinsock.senddata(STRCONV(lcUsuario,13) + crlf)
sleep(250)
oWinsock.senddata(STRCONV(lcPassword,13) + crlf)
sleep(250)
oWinSock.senddata("Mail From:"+lcFrom + crlf)
sleep(250)
oWinSock.senddata("RCPT TO:" + lcTo + crlf)
sleep(250)
oWinsock.senddata("DATA" + crlf)
oWinsock.senddata("From:" + lcFrom + crlf)
oWinSock.senddata("To:"+ lcTo + crlf)
oWinsock.senddata("Subject:" + lcSubject + crlf)
oWinsock.senddata(crlf + lcText + crlf)
sleep(250)
oWinsock.senddata("." + crlf)
sleep(250)
oWinsock.senddata("quit")
sleep(250)
Else
oWinsock.close()
RETURN "No se pudo conectar con el servidor"
Endif
oWinsock.close()
RETURN "El mensaje se envio correctamente"

1 comentario:

xx dijo...

Puedes adjuntar ficheros?
Saludos.