29 Sep 2005
 

NSC - Formmail Perl Script

FormMail is a pre-packaged, secure and versatile PERL script installed on www.nsc.ca to handle all html Form outputs.

You tell FormMail what to with your form submitted fields via "hidden" fields like "recipient" , "subject" and "title". You tell FormMail which fields the user must enter via the "required" hidden field. A typical example, the form definition part of the Mobility Cup Sailing Companion Registration Form, is included at the end.

To prevent distribution of SPAM mail by outside sources, FormMail will only send an email to users within the nsc.ca domain. Furthermore, I have modified the code to accept username without the "@nsc.ca".

If you are going to use FormMail, contact me first.as I may save you a lot of work!



form Configuration and Usage (Extracted from FormMail doc)
___
 See how the hidden 'recipient' input in the example below told formmail who
 to send the mail to. This is how almost all of formmail's configuration
 works. Here's the full list of things you can set with hidden form inputs:
 
 recipient               - The email address to which the form submission
                           should be sent. If you would like it copied to
                           more than one recipient then you can separate
                           multiple email addresses with commas, for
                           example:
 
                           <input type="hidden" name="recipient"
                                 value="you@your.domain,me@your.domain">
 
                           If you leave the 'recipient' field out of the
                           form, formmail will send to the first address
                           listed in the @allow_mail_to configuration
                           variable (see below).  This allows you to avoid
                           putting your email address in the form, which
                           might be desirable if you're concerned about
                           address harvesters collecting it and sending
                           you SPAM. This feature is disabled if the
                           $emulate_matts_code configuration variable is
                           set to 0.
 
 subject                 - The subject line for the email. For example:
 
                          <input type="hidden" name="subject"
                                 value="From the feedback form">
 
 redirect                - If this value is present it should be a URL, and
                           the user will be redirected there after a
                           successful form submission.  For example:
 
                           <input type="hidden" name="redirect"
                            value="http://www.your.domain/foo.html">
 
                           If you don't specify a redirect URL then instead
                           of redirecting formmail will generate a success
                           page telling the user that their submission was
                           successful.
 
 bgcolor                 - The background color for the success page.
 
 background              - The URL of the background image for the success
                           page.
 
 text_color              - The text color for the success page.
 
 link_color              - The link color for the success page.
 
 vlink_color             - The vlink color for the success page.
 
 alink_color             - The alink color for the success page.
 
 title                   - The title for the success page.
 
 return_link_url         - The target URL for a link at the end of the
                           success page. This is normally used to provide
                           a link from the success page back to your main
                           page or back to the page with the form on. For
                           example:
 
                           <input type="hidden" name="return_link_url"
                            value="/home.html">
 
 return_link_title       - The label for the return link.  For example:
 
                           <input type="hidden" name="return_link_title"
                            value="Back to my home page">
 
 sort                    - This sets the order in which the submitted form
                           inputs will appear in the email and on the
                           success page.  It can be the string 'alphabetic'
                           for alphabetic order, or the string "order:"
                           followed by a comma separated list of the input
                           names, for example:
 
                           <input type="hidden" name="sort"
                            value="order:name,email,age,comments">
 
                           If "order:" is used you must supply the names of
                           all of the fields that you want to be in the body of
                           the mail message.
 
 print_config            - This is mainly used for debugging, and if set it
                           causes formmail to include a dump of the
                           specified configuration settings in the email.
                           For example:
 
                           <input type="hidden" name="print_config"
                            value="title,sort">
 
                           ... will include whatever values you set for
                           'title' and 'sort' (if any) in the email.
 
 required                - This is a list of fields that the user must fill
                           in before they submit the form. If they leave
                           any of these fields blank then they will be sent
                           back to the form to try again.  For example:
 
                           <input type="hidden" name="required"
                            value="name,comments">
 
 missing_fields_redirect - If this is set, it must be a URL, and the user
                           will be redirected there if any of the fields
                           listed in 'required' are left blank. Use this if
                           you want finer control over the the error that
                           the user see's if they miss out a field.
 
 env_report              - This is a list of the CGI environment variables
                           that should be included in the email.  This is
                           useful for recording things like the IP address
                           of the user in the email. Any environment
                           variables that you want to use in 'env_report' in
                           any of your forms will need to be in the
                           @valid_ENV configuration variable described
                           above.
 
 print_blank_fields      - If this is set then fields that the user left
                           blank will be included in the email.  Normally,
                           blank fields are suppressed to save space.
 
 


A Typical form Example

Here is an example of how to post to FormMail, using the hidden fields to instruct FormMail what to do.

The FormMail PERL script was modified by Dan Servranckx in Apr 03 to accept partial email addresses (without @nsc.ca) to prevent email harvesting. For each recipient, FormMail will automatically add "@nsc.ca" if there is no "@" in the recipient email address. Note that the recipient is actually a short list:

 
 <form method="POST" action="/cgi-sys/FormMail.cgi">
   <span class="form">
   <input type="hidden" name="recipient" 
 		    value="mc-registrar,mc-registrar2"> 
   <input type="hidden" name="subject" 
 		    value="MC2003 Registration - Companion"> 
   <input type="hidden" name="title" 
 		    value="MC2003 Companion Auto Registration"> 
   <input type="hidden" name="print_blank_fields" value="0"> 
   <input type="hidden" name="return_link_url" 
 		    value="/mobilitycup/english/registration.htm">
   <input type="hidden" name="return_link_title" 
 		    value="Back to Registration Page">
   <input type="hidden" name="required" 
 		    value="First_name,Last_name,Address,City, 
 		    Province/State,Country,I_am_a_sailing_companion_for, 
 		    email,Home_phone_no">
   </span> 
     
 
 
... the form "body" goes here ...
     
   <br />
   <span class="form">
   Please click the Submit button <strong>only once</strong>, then wait. 
   It's a big form and the form handler will need a few minutes to process it. 
   </span>
 
   <br />
   <span class="form"><input type="submit" value="Submit">      
   <input type="reset" value="Reset"></span>
 
 </form>
 
 
  Comments to the Webmaster