Esto lo saque de PortalFox, puede enviar una URL Mailto como el comando ShellExecute para facilitar el envío de correo electrónico en VFP.
*******************************
*!* Ejemplo de utilización de SendViaShell
*******************************
LOCAL lcTo, lcSubject, lcBody, lcCC, lcBCC, lcErrReturn
lcTo = "
alguien@algundominio.com"
lcSubject = "Enviar un email con VFP"
lcBody = "Enviar un mail desde VFP por el ShellExecute" + CHR(13) + "y hay otras formas de enviar un email."
lcCC = "
otro@otrodominio.com"
lcBCC = "
mijefe@dominiodeljefe.com"
SendViaShell(@lcErrReturn, lcTo, lcSubject, lcBody, lcCC, lcBCC)
IF EMPTY(lcErrReturn)
MESSAGEBOX("'" + lcSubject + "' se envió satisfactoriamente.", 64, "Enviar email vía Shell")
ELSE
MESSAGEBOX("'" + lcSubject + "'falló al enviar. Causa:" + CHR(13) + lcErrReturn, 64, ;
"Enviar email vía Shell")
ENDIF
*******************************************
PROCEDURE SendViaShell(tcReturn, tcTo, tcSubject, tcBody, tcCC, tcBCC)
*******************************************
DECLARE INTEGER ShellExecute IN shell32.DLL ;
INTEGER hwndWin, STRING cOperation, STRING cFile, ;
STRING cParameters, STRING cDirectory, INTEGER nShowWin
LOCAL lcCommand, lcCRLF
TRY
lcCRLF = "%0D%0A"
lcCommand = "mailto:" + tcTo + "?Subject=" + tcSubject + "&Body=" + STRTRAN(tcBody, CHR(13), lcCRLF)
IF TYPE("tcCC") = "C"
lcCommand = lcCommand + "&CC=" + tcCC
ENDIF
IF TYPE("tcBCC") = "C"
lcCommand = lcCommand + "&BCC=" + tcBCC
ENDIF
IF LEN(lcCommand) > 2020 && debía ser 2048, pero no en mi sistema
THROW "El comando Mailto está limitado a 2048 bytes"
ENDIF
ShellExecute(0, "open", lcCommand, "", "", 1)
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
CLEAR DLLS "ShellExecute"
ENDTRY
ENDPROC