This answer is very similar to Will's. It does the job with a bit less code.
Assuming the user submits a form, start with this:
session.mailto = form.mailto;
session.mailfrom = form.mailfrom;
Then do this:
<cfsavecontent variable = "session.mailbody">
code
</cfsavecontent>
Present this to the user:
<a href="javascript:void(0)"
onclick="Emailwin=window.open('SendMail.cfm','thewin',
'width=500,height=500,left=30,top=30');">
<button type="button">Send Mail </button>
SendMail.cfm looks like this:
<cfmail to="#session.mailto#" from="#session.mailfrom#"
subject = "something" type="html">
#session.mailbody#
</cfmail>
<h3>Your mail has been sent. This window will close in 2 seconds.</h3>
<script language="javascript">
winClose=window.setTimeout("window.close()",2000);
</script>
The code which I copied was written a long time ago in an envrionment with locked down computers. If I were to do it again, I would probably use hidden form fields instead of session variables. They are more likely to change unexpectedly these days.
If you are coding for the general public, bear in mind that the user might change his browser preferences to prevent the new window from opening.