Por si te sirve, este es un código puesto en el evento click de un boton asociado a envio de correos.
En la propiedad agregada this.enhtlm le indico que lo que quiero mandar en texto comun (.F.) o HTML (.T.)
Para crear el cuerpo en HTML uso el TEXT ... END TEXT
IF EMPTY(this.DIRECCION)
MESSAGEBOX('falta la direccion de correo',16,'INCOMPLETO')
RETURN
ENDIF
IF EMPTY(this.archivo) AND EMPTY(this.body)
MESSAGEBOX('indique la imagen a enviar x correo';
+CHR(13)+'O complete el texto del correo';
,16,'INCOMPLETO')
RETURN
ENDIF
IF !EMPTY(this.archivo) AND !file(this.archivo)
MESSAGEBOX('No encuentra el archivo de imagen a enviar x correo';
+CHR(13)+this.archivo;
,16,'INCOMPLETO')
RETURN
ENDIF
IF VARTYPE(this.outlook) <> 'O'
TRY
this.outlook= GETOBJECT( ,"Outlook.Application")
CATCH TO loerror
TRY
this.outlook= Createobject("Outlook.Application")
CATCH TO loerror
ENDTRY
ENDTRY
IF VARTYPE(this.outlook) <> 'O'
MESSAGEBOX('No pudo abrir el outlook para mandar el mail',16,'')
RETURN
ENDIF
ENDIF
TRY
oEmail = this.outlook.CreateItem(0)
With oEmail
.Subject = ALLTRIM(This.asunto)
.Importance = 1
IF this.enhtlm = .f.
IF EMPTY(this.body)
.Body = ALLTRIM(This.asunto)
ELSE
.Body = this.body
ENDIF
ELSE
IF EMPTY(this.body)
.HTMLBody = ALLTRIM(This.asunto)
ELSE
.HTMLBody = this.body
ENDIF
ENDIF
.TO = this.DIRECCION
* .Recipients(1).TYPE = 1
IF !empty(this.archivo)
.attachments.add(this.archivo)
ENDIF
.Send
EndWith
Release oEmail
oMAPI = this.outlook.GetNameSpace("MAPI")
oCarpeta = oMAPI.GetDefaultFolder(4)
oCarpeta.display
CATCH TO loerror
MESSAGEBOX('No puede enviar el correo ';
+CHR(13)+'Direccion '+this.DIRECCION;
+CHR(13)+'Asunto ' +This.asunto ;
+CHR(13)+'Adjunto '+this.archivo;
+CHR(13)+LOERROR.MESSAGE;
,16,'FALLA EN EL OUTLOOK')
ENDTRY
Como ejemplo de creacion del HTML que crea un cuerpo con una grilla que luego voy cargando:
TEXT TO lcHTML ADDITIVE TEXTMERGE NOSHOW
<html>
<HEAD><<LCFECHA>>
<style>
* {padding:0px; margin:0px; font-size:11px; font-family:Tahoma, Geneva, sans-serif; color:#000;}
table {width:100%; font-size:11px; font-family:Tahoma, Geneva, sans-serif;}
table td { border:solid 1px #666; padding:4px; font-size:11px; font-family:Tahoma, Geneva, sans-serif; }
table tr.bottom th { margin-bottom:10px; font-size:11px; font-family:Tahoma, Geneva, sans-serif; }
</style>
</HEAD>
<table id="GenTable" border=0 cellpadding="0" cellspacing="0">
ENDTEXT
SELECT presenta
SCAN
IF ALLTRIM(TRACTOR) = 'TRACTOR'
IF INLIST(SECTOR,'YPF','PETRO','OIL')
DO CASE
CASE SECTOR = 'YPF'
TEXT TO lcHTML ADDITIVE TEXTMERGE NOSHOW
<tr style="background-color:royalblue">
ENDTEXT
CASE SECTOR = 'PETRO'
TEXT TO lcHTML ADDITIVE TEXTMERGE NOSHOW
<tr style="background-color:forestgreen">
ENDTEXT
CASE SECTOR = 'OIL'
TEXT TO lcHTML ADDITIVE TEXTMERGE NOSHOW
<tr style="background-color:darkturquoise">
ENDTEXT
ENDCASE
ENDIF
* titulos
IF ThisForm.Pgfgral1.Page1.Optgral1.Value < 3
TEXT TO lcHTML ADDITIVE TEXTMERGE NOSHOW
<th><<Tractor>></th>
<th><<M3>></th>
<th>Viajes</th>
<th><<COMENT>></th>
<th>Chofer1</th>
<th>Inicio1</th>
<th>Jornada1</th>
<th>Estatus</th>
<th>Chofer2</th>
<th>Inicio2</th>
<th>Jornada2</th>
<th>En reserva</th>
</tr>
ENDTEXT
y asi sigue armando la variable LCHTML que en definitiva es lo que se pone en el cuerpo del correo.
Con paciencia, tutoriales varios, se puede armar cualquier presentación.
Suerte.