I've done something very similar here. Although I'm using a very simple
XML file to configure each email, with the option to override those
values through a passed argument.

sendEmail(template, emailOptions, emailVars);

The template is an XML file:

<email to="" from="" cc="" bcc="" subject="" type="" ...>
Hello #username#,
This is a test email.
</email>

emailOptions is a structure with corresponding keys (to, from, bcc)
which will overwrite any default values specified in the XML file.

emailVars is a structure that contains any variables used within the
body of the email. In the above example the only key would be
'username'.

This is a bit different from how you are handling, but it works well for
us here. I can send the XML file to the tech writers and have them draft
the email directly. Plus you can add methods within sendEmail to create
logs when mail is sent.

Adam Wayne Lehman
Web Systems Developer
Johns Hopkins Bloomberg School of Public Health
Distance Education Division


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Jeffry Houser
Sent: Monday, November 10, 2003 10:38 AM
To: cfcdev
Subject: [CFCDev] Creating a CFC to send an email


Hi All,

  A client wanted a CFC to handle emails.  One of the primary objectives
of 
their current development is flexibility.  So, they wanted to be able to

specify (or not) as many attributes as possible.

  This is not a problem until you get to the point of sending the 
email.  You can't put conditionals inside a tag that say "if this
variable 
has a value, use the tag with this attribute."

  There are 20 optional parameters to cfmail in MX61, which means a
whole 
lot of different variations of the tag.  Writing all those options are
not 
practical, so how do you approach it?

  This is what I did:

First any optional attribute that could be given a default, was:

ReplyTo and FailTo were set to be identical to the "from" value;
type was set to HTML;
Port was set to 25
timeout was set to 30
MailerID was set to ColdFusion MX Application Server
CharSet was set to UTF-8
SpoolEnable was set to no


  I left out the query related attributes, since the cfc was only being 
designed to send a single email.

That left 7 remaining optional attributes.  I made the assumption that 
username would never be used without password (and vice versa), which
left 
6 options:

  cc,
  bcc,
  wraptext
  mimeattach
  username / password
  server

  The next step was to write a function.  To allow for all the optional 
parameters, I first created a string (Email Attributes) like this:

<Cfif instance.server is not "">
         <Cfset EmailAttributes = EmailAttributes & "1">
</Cfif>
<Cfif instance.username is not "">
         <Cfset EmailAttributes = EmailAttributes & "2">
</Cfif>
  etc.. etc..

Then I entered into a switch statement on the value of EmailAttributes.

If it was equal to 1 (Just Server), the cfmail tag looked like this:

<cfmail to="#instance.Personto#" from="#instance.PersonFrom#" 
subject="#Instance.Subject#" 
replyto="#instance.replyto#"         type="#instance.type#"
         port="#instance.port#" timeout="#instance.timeout#" mailerID 
="#instance.mailerID#" charset = "#instance.charset#"
         spoolenable="#Instance.spoolenable#" failto="#instance.failto#"

server="#instance.server#">

</cfmail>


If it was 12 it looked like this (server, username, and password):
<cfmail to="#instance.Personto#" from="#instance.PersonFrom#" 
subject="#Instance.Subject#" 
replyto="#instance.replyto#"         type="#instance.type#"
         port="#instance.port#" timeout="#instance.timeout#" mailerID 
="#instance.mailerID#" charset = "#instance.charset#"
         spoolenable="#Instance.spoolenable#" failto="#instance.failto#"

server="#instance.server#" 
username="#instance.username#"       password="#instance.password#">

</cfmail>

etc.. etc..

I ended up with 46 different variations, although it is "hidden" from
the 
user of the CFC.  For efficiency sake, I also provided a simple 
email  function which sends an email with default parameters.

  Am I missing something obvious or is there an easier way to approach
this?


--
Jeffry Houser, Web Developer <mailto:[EMAIL PROTECTED]>
Aaron Skye, Guitarist / Songwriter <mailto:[EMAIL PROTECTED]>
--
AIM: Reboog711  | Phone: 1-203-379-0773
--
My Books: <http://www.instantcoldfusion.com>
Recording Music: <http://www.fcfstudios.com>
Original Energetic Acoustic Rock: <http://www.farcryfly.com> 


----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev' 
in the message of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).

An archive of the CFCDev list is available at
www.mail-archive.com/[EMAIL PROTECTED]

----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the word 'unsubscribe cfcdev' 
in the message of the email.

CFCDev is run by CFCZone (www.cfczone.org) and supported
by Mindtool, Corporation (www.mindtool.com).

An archive of the CFCDev list is available at www.mail-archive.com/[EMAIL PROTECTED]

Reply via email to