CFMAIL and Dynamic Message Content


Pardon me while I put on my geek hat. I’ve been hitting my head up against a wall trying to figure out the best way to dynamically include content into an email using ColdFusion.

I tried the most logical solution first, define the URL with the data I wanted and pass that onto the SEND script.

 <input type="hidden" name="msgString" value="http://example.com/msg/test.cfm?subject=Hi&sender=joe@example.com&recip=john@example.com" />

Then, I converted the string to a variable I could more easily work with…

<cfset msgStr = "#form.messageString#" />
<cfmail to="user@example.com"
 from="user@example.com"
 subject="Hey there!"
 server="mail.example.com"
 type="html">
  <cfinclude url="#msgStr#" />
</cfmail>

No luck. ColdFusion choked on the dynamic string everytime. When I tried to define the string as a variable and parse it with CFOUTPUT, ColdFusion choked again.

So, I thought, why not try using CFHTTP to grab the data, and then have it render into the body of the email I wanted to send.

<cfhttp resolveurl="yes" url="http://www.example.com/#form.messageString#" method="get"></cfhttp>
<cfmail to="user@example.com"
 from="user@example.com"
 subject="Hey there!"
 server="mail.example.com"
 type="html">
  #CFHTTP.FileContent#
</cfmail>

BINGO! That worked. In retrospect, it seems pretty easy to do it this way… but I couldn’t get it to work right for quite some time. Now it works right, and the client should be happy.