PHPFormMail - Classic



Copyright and Header
#############################################################################
# PHPFormMail - Something we've always had...                               #
# Copyright (c) 1999 Andrew Riley (webmaster@boaddrink.com)                 #

#                                                                           #
#############################################################################
#                                                                           #
# If you run into any problems, please check out http://www.boaddrink.com.  #
#                                                                           #
#############################################################################

Overview

PHPFormMail is a universal WWW form to e-mail gateway.. PHPFormMail's main goal is to seamlessly take the place of it's PERL sister. All functions from PERL FormMail have an exact duplicate in PHPFormMail. PHPFormMail also has some extra functions built in, where ever you see a "*" (red star) is a new feature. Special thanks to Matt's Script Archive (http://www.worldwidemart.com/scripts) for if it wasn't for him/them/her (?) there would be no FormMail period. =:^)

There is only one required form input tag which must be specified in order for this script to work with your existing forms. Other hidden configuration fields can also be used to enhance the operation of FormMail on your site.

The anonymous WWW user must have the ability to read/execute the PHPFormMail.php script. If you have problems running a script with the .php extension, try .php3, .phtm, .phtml. If those do not work, please check with your system administrator for more help on running PHP scripts.



Setting Up the PHPFormMail Script

The PHPFormMail.php script does not have to be extensively configured in order to work. There are only two variables in the script in which you will need to modify.

Necessary Variable
 
$referers = array("boaddrink.com","216.92.77.123");
This array allows you to define the domains that you will allow forms to reside on and use your PHPFormMail script. If a user tries to put a form on another server, that is not in your list, they will receive an error message when someone tries to fill out their form. By placing boaddrink in the $referers array, this DOES NOT allow www.boaddrink.com, ftp.boaddrink.com, any other http address with boaddrink.com in it. I included boaddrink.com's IP address to access this script as well, just to be on the safe side..

Note: The domains listed in the $referers array must also include the domain that the e-mail is going to.

Example: If the recipient of the e-mail is test@example.com and the form is hosted on boaddrink.com, your $referes array will have to look like

$referers = array("boaddrink.com", "example.com");

Remember, the domain name of the recipient's domain must be listed in the $referer array, even if the form isn't hosted on that domain. Rule of thumb, include the domain name that is hosting the form AND include the domain name of the recipients (This includes recipient, recipient_cc, and recipient_bcc).
 
$valid_env = array("REMOTE_HOST", "REMOTE_ADDR", "REMOTE_USER", "HTTP_USER_AGENT");
This array allows you to define enviromental variables that can be reported. The odds are you won't need to change these. For more information on environmental variables, please see env_report.

Your phpformmail program is now configured.

Note: Users of PHP3 will need to uncomment the following lines:

/*function in_array($needle,$haystack){
      $found = false;
      while (list($key,$val) = each ($haystack)){
           if ($needle == $val){
               $found = true;
           }
      }
      return $found;
}*/

Will look like:

function in_array($needle,$haystack){
      $found = false;
      while (list($key,$val) = each ($haystack)){
           if ($needle == $val){
               $found = true;
           }
      }
      return $found;
}



Form Configuration

The action of your form needs to point towards this script (obviously), and the method must be POST or GET in capital letters. Below is a list of form fields you can use and how to implement them.

Necessary Form Fields

There is only one form field that you must have in your form, for PHPFormMail to work correctly. This is the recipient field.

Field: recipient
Description: This form field allows you to specify to whom you wish for your form results to be mailed. Most likely you will want to configure this option as a hidden form field with a value equal to that of your e-mail address.
Syntax: <input type="hidden" name="recipient" value="email@example.com">


Optional Form Fields

Field: subject
Description: The subject field will allow you to specify the subject that you wish to appear in the e-mail that is sent to you after this form has been filled out. If you do not have this option turned on, then the script will default to a message subject: WWW Form Submission
Syntax:

If you wish to choose what the subject is:
<input type="hidden" name="subject" value="Your Subject">

To allow the user to choose a subject:
<input type="text" name="subject">

 

Field: email
Description:

This form field will allow the user to specify their return e-mail address. If you want to be able to return e-mail to your user, I strongly suggest that you include this form field and allow them to fill it in. This will be put into the From: field of the message you receive. If you want to require an email address with valid syntax, add this field name to the 'required' field.

To send e-mail to more than one address, use commas to seperate the addresses.

Syntax:

Single Recipient:
<input type="text" name="email" value="nobody@example.com">

Multiple Recipients:
<input type="text" name="email" value="nobody@example.com,nobody@example1.com">

 

Field: recipient_cc*
Description:

This form field will allow you to carbon copy (CC) the the e-mail to the e-mail address listed. Use this only if you have the email field specified. This will cause two copies of the e-mail to be sent. The first to the address listed in the email field and the second to the address listed in the recipient_cc.

To send e-mail to more than one address, use commas to seperate the addresses.

Syntax:

Single Recipient:
<input type="text" name="recipient_cc" value="nobody@example.com">

Multiple Recipients:
<input type="text" name="recipient_cc" value="nobody@example.com,nobody@example1.com">

 

Field: recipient_bcc*
Description:

This form field will allow you to blind carbon copy (BCC) the the e-mail to the e-mail address listed. To use this fields, you don't have to specify the email field. This will cause the e-mail to be sent but the recipients listed in the recipient_bcc without the recipients to see who it was sent to.

To send e-mail to more than one address, use commas to seperate the addresses.

Syntax:

Single Recipient:
<input type="text" name="recipient_bcc" value="nobody@example.com">

Multiple Recipients:
<input type="text" name="recipient_bcc" value="nobody@example.com,nobody@example1.com">

 

Field: realname
Description: The realname form field will allow the user to input their real name. This field is useful for identification purposes and will also be put into the From: line of your message header.
Syntax: <input type="text" name="realname">

 

Field: redirect
Description: If you wish to redirect the user to a different URL, rather than having them see the default response to the fill-out form, you can use this hidden variable to send them to a pre-made HTML page.
Syntax: To choose the URL they will end up at:
<input type="hidden" name="redirect" value="http://your.host.com/to/file.html">

To allow them to specify a URL they wish to travel to once the form is filled out:
<input type="text" name="redirect">

 

Field: required
Description: You can now require for certain fields in your form to be filled in before the user can successfully submit the form. Simply place all field names that you want to be mandatory into this field. If the required fields are not filled in, the user will be notified of what they need to fill in, and a link back to the form they just submitted will be provided.

To use a customized error page, see 'missing_fields_redirect'

Syntax: If you want to require that they fill in the email and phone fields in your form, so that you can reach them once you have received the mail, use a syntax like:

<input type="hidden" name="required" value="email,phone">

 

Field: sort
Description:

There are three ways to sort the output of the form.

  • Alphabetic*: An alphabetic listing based on the field names.
  • Reverse Alphabetic*: A reverse alphabetic listing based on the field names.
  • Order: Allows you to specify the order that you would like the fields to be in. Note: If you have five form variables, and you only wish to move two of them to the begining of the e-mail and allow the others to stay in their natural order, you just need to specify the two variables. The remaining variables will be included in the e-mail.

 

Syntax:

If you want to require that they fill in the email and phone fields in your form, so that you can reach them once you have received the mail, use a syntax like:

For Alphabetic listings*:
<input type="hidden" name="sort" value="alphabetic">

For Reverse Alphabetic listings*:
<input type="hidden" name="sort" value="alphabetic">

For Order listings (This would list the fields in the order of: name, comment, email):
<input type="hidden" name="sort" value="order:name,comment,email">

 

Field: env_report
Description:

Allows you to have Environment variables included in the e-mail message you receive after a user has filled out your form. Useful if you wish to know what browser they were using, what domain they were coming from or any other attributes associated with environment variables. Each enviroment variable is sepperated by a comma. The following is a short list of valid environment variables that might be useful:

 

REMOTE_HOST - Sends the hostname making the request.
REMOTE_ADDR - Sends the IP address of the remote host making the request.
REMOTE_USER - If server supports authentication and script is protected, this is the username they have authenticated as. *This is not usually set.*
HTTP_USER_AGENT - The browser the client is using to send the request.

For more environmental variables, please see
http://hoohoo.ncsa.uiuc.edu/cgi/env.html

Remember to allow the enviromental variables in $valid_env.

Syntax: If you wanted to see the host making the request and the browser the user is using in your our e-mail , you would put the following into your form:

<input type="hidden" name="env_report" value="REMOTE_HOST,HTTP_USER_AGENT">

 

Field: priority*
Description: priority allows you to modify the priority of the e-mail you will receive. 3 is normail priority for an e-mail (default) and 1 is the highest priority.
Syntax:

If you wish to have the highest priority:
<input type="hidden" name="priority" value="1">

If you wish to have the lowest priority (normal):
<input type="hidden" name="priority" value="3">

 

Field: print_blank_fields
Description: print_blank_fields allows you to request that all form fields are printed in the return HTML, regardless of whether or not they were filled in. PHPFormMail defaults to turning this off, so that unused form fields aren't e-mailed.
Syntax: If you want to print all blank fields:
<input type="hidden" name="print_blank_fields" value="1">

 

Field: title
Description: This form field allows you to specify the title and header that will appear on the resulting page if you do not specify a redirect URL.
Syntax: If you wanted a title of 'Feedback Form Results':

<input type="hidden" name="title" value="Feedback Form Results">

 

Field: return_link_url
Description: This field allows you to specify a URL that will appear, as return_link_title, on the following report page. This field will not be used if you have the redirect field set, but it is useful if you allow the user to receive the report on the following page, but want to offer them a way to get back to your main page.
Syntax: <input type="hidden" name="return_link_url" value="http://your.host.com/main.html">

 

Field: return_link_title
Description:

This is the title that will be used to link the user back to the page you specify with return_link_url. The two fields will be shown on the resulting form page as:

Syntax: <input type="hidden" name="return_link_title" value="Back to Main Page">

 

Field: missing_fields_redirect
Description: This form field allows you to specify a URL that users will be redirected to if there are fields listed in the required form field that are not filled in. This is so you can customize an error page instead of displaying the default.
Syntax: <input type="hidden" name="missing_fields_redirect" value="http://your.host.com/error.html">

 

Field: background
Description: This form field allow you to specify a background image that will appear if you do not have the redirect field set. This image will appear as the background to the form results page.
Syntax: <input type="hidden" name="background" value="http://your.host.xxx/image.gif">

 

Field: bgcolor
Description: This form field allow you to specify a bgcolor for the form results page in much the way you specify a background image.
Syntax: For a background color of White:

<input type="hidden" name="bgcolor" value="#FFFFFF">

 

Field: text_color
Description: This field works in the same way as bgcolor, except that it will change the color of your text.
Syntax: For a text color of Black:

<input type="hidden" name="text_color" value="#000000">

 

Field: link_color
Description: Changes the color of links on the resulting page. Works in the same way as text_color.
Syntax: For a link color of Red:

<input type="hidden" name="link_color" value="#FF0000">

 

Field: vlink_color
Description: Changes the color of visited links on the resulting page. Works exactly the same as link_color.
Syntax: For a visited link color of Blue:

<input type="hidden" name="vlink_color" value="#0000FF">

 

Field: alink_color
Description: Changes the color of active links on the resulting page. Works exactly the same as link_color.
Syntax: For a active link color of Blue:

<input type="hidden" name="alink_color" value="#0000FF">

 

Field: css*
Description: Allows for the results/error page to link to a Cascading Style Sheet (css).
Syntax: To link to main.css:

<input type="hidden" name="css" value="http://your.host.xxx/main.css">

 

Field: _regex*
Description:

Allows for regular expression comparisons on form results. For a field to be checked, it must also be listed in required.

To check a field, append _regex to the hidden field name.

Note: This function uses eregi() so you must use postix regular expressions.

Syntax: To check that the date field is in propper date format:

<input type="hidden" name="date_regex" value="$[0-9{4}-[0-9]{2}-[0-9]{2}$">

 

Any other form fields that appear in your script will be mailed back to you and displayed on the resulting page if you do not have the redirect field set. There is no limit as to how many other form fields you can use with this form, except the limits imposed by browsers and your server.

 

HTML Notes
 
Multiple Results
When using checkboxes and multiple selection lists, you'll need to add [] to the end of the name. When the [] is added, PHPFormMail can then properly process the field and print it out in a comma separated format.


Donations

As you know, most of the software I release is free, and will always be free. Keep in mind that this donation page isn't for me to profit, it's to allow me to continue developing free software and to keep boaddrink.com for you, the user. Please remember that this software is free for you to download and use but that doesn't mean it's not worth anything. You can donate any amount of money you wish... from $1 to $1,000,000. While a million dollars would be nice don't be pressured, any amount helps, even one dollar.

If you wish to donate, please visit http://www.boaddrink.com/donate.php

Thanks,
Andrew Riley




History
Version Date  
1.03 2002/01/01 Added fields recipient_cc, recipient_bcc and priority.
Now the redirected "error" and "thank you" pages receive all the variables POST encoded for any third party scripts.
Changed most attributes to use styles rather than html attributes.
Changed how colors were implemented. If they are not defined they will use the browser default instead of the old white/black color scheme.
Fixed a bug with the non-redirected "error" and "thank you" pages' title. They now properly reflect the page that is displaying.
Made CSS fully CSS compliant.
Misc. code cleanups
1.02 2001/09/24 Added value array fix (konrad@shortcircuit.be)
Added back in regular expression searching.
Defined the version number at the top of the PHP document and reference the define throughout the script.
Added a check for valid environmental variables to stop malicious attacks.
1.01 2001/09/10 Added sort ability.
Made the environmental section variable.
Fixed a small bug with the apostrophes (screen output).
Removed most of the "for" loops.
Cleaned up the documentation.
Made the documentation HTML 4.1 Transitional.
Made the output of PHPFormMail XHTML 1.0.
0.03b 2001/05/25 Add strip slashes to the output e-mail for those that need it.
0.02b 2000/02/06 Documentation added, fixed refers, and general code clean up.
0.01b 2000/01/31 This script was created.

 


Copyright 1999 Andrew Riley

Valid HTML 4.01!