#DEFINE CRLF CHR(13) + CHR(10) LOCAL lnROw, lnColumn, lnOnColumn, lnOnRow, myText lnRow = number of table rows to use lnColumn = 4 && number of field items to use... I will use 4 as an example. Note that you will need to set your width of each column based on the number of columns/100 initially, then you can adjust specific widths based on text lenghth lnOnRow = 0 &¤t record number lnOnField = 0 &¤t field number myText = "" HTMLSTring + field data we will send as message *-- you will see below a reference to the current field as 'YOURTABLEDATA'. Insure you convert accordingly to string value *-- ie: source data is number then STR(YOURTABLEDATA), source data is date then DTOC(YOURTABLEDATA), etc.... *-- Note: default HTML table width I use is "80%"... generally good enough for most window sizes... and remember, HTML *-- will automatically compress column widths based on percentage against the current viewing window size myText = '<table bordercolor="#000000" border="1" width="80%">' + CRLF *-- Repeat for each row in the table FOR lnOnRow = 1 TO lnRow myText = myText + '<tr valign="center">' *-- Repeat for each column FOR lnOnField = 1 TO lnColumn myText = myText + '<td width="25%">' + CRLF myText = myText + '<font face=Arial>' + YOURTABLEDATA + '</font></td>' + CRLF NEXT lnOnField myText = myText + '</tr>' + CRLF NEXT lnOnRow myText = myText + '</table>' *-- do the stuff to make a message, like Namespace, etc... *-- Change the body of the message, instead of: *-- myMsg.Body = myText *-- use: myMsg.HTMLBody = myText *--- send the message...HTH,