Thanks a lot Sergey, this class is really great, and I've been using it in production with 100% of satisfaction, and it included in the sources of FoxyPreviewer - http://foxypreviewer.codeplex.com/ Just wanted to pass to you some few enhancements that I made: 1 - The error handling works perfectly. But noticed that the error messages returned by the class in most cases bring a CHR(0) in the message. The VFP MESSAGEBOX() command can't show texts that have CHR(0) correctly, because it thinks that the string has ended when it finds it. So I just included this line in the method "AddOneError": lcErrorMsg = CHRTRAN(lcErrorMsg, CHR(0), "") 2 - I've added the possibility of setting the "Priority" and "Ask for read receipt". Included 2 properties: "lPriority" and "lReadReceipt" In procedure "Send", included the code below: * http://support.microsoft.com/kb/302839 IF This.lReadReceipt This.oMsg.Fields("urn:schemas:mailheader:disposition-notification-to") = This.cTo This.oMsg.Fields("urn:schemas:mailheader:return-receipt-to") = This.cTo This.oMsg.Fields.Update() ENDIF * Set priority if needed IF This.lPriority This.oMsg.Fields("Priority").Value = 1 && -1=Low, 0=Normal, 1=High This.oMsg.Fields.Item("urn:schemas:mailheader:X-Priority") = 1 && -1=Low, 0=Normal, 1=High This.oMsg.Fields.Item("urn:schemas:httpmail:importance") = 1 This.oMsg.Fields.Update() ENDIF Thanks again for this class and for the samples for using it with the several SMTP email servers. The BEREZNIKEROPEDIA ROCKS !!! Regards