Solved

Email not sending from contact form script

Posted on 2008-10-25
3
1,755 Views
Last Modified: 2013-12-18
I have created a form that contacts individuals from a drop down menu.  The form appears to run smoothly but the emails are not being sent.  
<?php
 

/*

** Dagon Design Form Mailer 

**

** Version 5.6

**

** http://www.dagondesign.com/articles/secure-php-form-mailer-script/

**

** A basic explanation of each option can be found below. For full documentation,

** including advanced usage, updates, and more, please visit the web site.

**

*/
 

//error_reporting(E_ALL);
 

/*

** START OF OPTIONS

*/
 
 

// STANDALONE OPTION

// If you plan to use this script by itself (not included from another PHP file), set this 

// option to TRUE, and it will generate a proper html header and footer. If you want to

// change the basic header and footer, they are found near the bottom of this script
 

$standalone = FALSE;
 

// If you are using the standalone option, enter the relative path to your CSS file so it  

// can be declared properly in the header
 

$path_to_css = 'dd-formmailer/dd-formmailer.css';
 

// For those of you including this script in another PHP file, be sure to manually

// add the CSS declaration in the header section of your page:

//   <link rel="stylesheet" href="(location of dd-formmailer.css)" type="text/css" media="screen" />

// You also need to load the JS file used by the date chooser, if you choose to use this field:

//   <script type="text/javascript" src="(location of date_chooser.js)"></script>

// If you are using the stand-alone mode, these will be added automatically
 

// LANGUAGE SETTING 

// The relative path to the language file you want to use.
 

$language = 'lang/English.php';
 

// FULL URL TO SCRIPT

// The full URL to dd-formmailer.php (or whatever you have renamed it to)
 

$script_path = 'http://www.cdflyfishers.org/dd-formmailer/dd-formmailer1.php';
 

// FULL URL TO CONTACT PAGE

// If you are running this script in standalone mode, leave this blank. Otherwise,

// enter the full URL to the page that is displaying the form
 

$path_contact_page = 'http://www.cdflyfishers.org/contact.php';
 

// RECIPIENT DATA

// If you are just sending email to a single address, enter it here. For more advanced

// usage such as multiple recipients, CC, BCC, etc.. please see the web page for instructions
 

$recipients = 'selrecip';
 

// FORM STRUCTURE

// This is used to generate the form. Each form element must be on its own line.

// Detailed usage instructions can be found on the web page
 

$form_struct = '

	type=selrecip|class=fmselect|label=Recipient|data=(select),President,(Flyfloat@aol.com),Vice President,(jjpflytyer@yahoo.com),Secretary,(ekroth@nycap.rr.com),Treasurer,(rpriddle@nycap.rr.com),Conservation Director,(Flyfloat@aol.com),Education Director,(loubruno@nycap.rr.com),Membership Director,(m_gully@msn.com),Newsletter Editor,(ekroth@nycap.rr.com),Gillie,(AJPLMP@aol.com),Webmaster,(andy@fryecompanies.com)

	type=text|class=fmtext|label=Name|fieldname=fm_name|max=100|req=true

	type=text|class=fmtext|label=Email|fieldname=fm_email|max=100|req=true|ver=email

	type=text|class=fmtext|label=Subject|fieldname=fm_subject|max=100|req=true

	type=verify|class=fmverify|label=Verify

	type=textarea|class=fmtextarea|label=Message|fieldname=fm_message|max=1000|rows=6|req=true

';
 

// MANUAL FORM CODE

// Advanced users only! please read documentation first
 

$manual_form_code = '';
 

// WRAP MESSAGES

// If enabled, this wraps messages to 70 chars per line (for RFC compliance)
 

$wrap_messages = TRUE;
 

// SAVE ATTACHMENTS

// If enabled, attachments will be saved to a directory instead of emailed
 

$attach_save = FALSE;
 

// SAVE ATTACHMENT PATH

// Where files will be saved, if attach_save is enabled

// ** Full path on server. Ex: /home/user/public_html/upload/

// ** Make sure directory has write permission

// ** include trailing slash
 

$attach_path = '';
 

// SHOW REQUIRED

// If enabled, required fields are marked with an asterisk
 

$show_required = TRUE;
 

// SHOW URL

// If enabled, the URL the script is running from will be added to the message
 

$show_url = FALSE;
 

// SHOW IP AND HOSTNAME

// If enabled, the visitor's IP and hostname are added to the message
 

$show_ip_hostname = TRUE;
 

// SPECIAL FIELDS

// These options help generate the email headers. Simply enter a field name,

// and the user input from that field will be used. You can also combine fields. 

// For example, if you have a fm_firstname and fm_lastname field, you could 

// set $sender_name to 'fm_lastname, fm_firstname'
 

$sender_name = 'fm_name';

$sender_email = 'fm_email';

$email_subject = 'CDFF: fm_subject';
 

// MAX UPLOAD SIZE

// If you are using file uploads in your form, this specifies the max file size.

// (This does not override any server settings you might have in PHP.ini)
 

$max_file_size = 1000000; // in bytes
 

// MESSAGE STRUCTURE

// This is an optional setting that allows you to define your own custom message

// template. More information can be found on the web page. If left blank, the script

// will generate the message itself, which is generally suitable for most purposes.

// You use field names in this - they will be replaced with the user input from those fields.
 

$message_structure = '';
 

// SUCCESS MESSAGE

// This is the text shown after the visitor has successfully submitted the form.

// You use field names in this - they will be replaced with the user input from those fields.
 

$sent_message = '<p><b>Thank you - your message has been sent.</b></p><br /><br /><br /><br /><br /><br /><br />';
 

// AUTO REPLY OPTION

// This optional feature allows you to automatically send a pre-defined auto reply email.

// To use it, simply specify the name and email address you want the message to be 'from', 

// as well as a subject and message. To disable, just leave $auto_reply_message blank.

// You use field names in the message - they will be replaced with the user input from those fields.
 
 

$auto_reply_name = '';

$auto_reply_email = '';

$auto_reply_subject = '';

$auto_reply_message = '';
 

// IMAGE VERIFICATION

// You can disable image verification, use the simple built-in method, or use ReCaptcha

// If you use ReCaptcha, sign up for a free account at http://recaptcha.net and enter the codes below
 

$verify_method = 'recaptcha'; // 'off', 'basic', or 'recaptcha'
 

// BASIC IMAGE VERIFICATION OPTIONS
 

$verify_background = 'F0F0F0';	// hex code for background color

$verify_text = '005ABE';		// hex code for text color

$force_type = '';				// problems showing the code? try forcing to 'gif', 'jpeg' or 'png'
 

// RECAPTCHA IMAGE VERIFICATION OPTIONS

// Public and private keys - you get these when you sign up an account at http://recaptcha.net
 

$re_public_key = '6LeHpwMAAAAAAKKO12iqPtH2TjK9Ce7gKIIBHFwp';

$re_private_key = '6LeHpwMAAAAAAGhMtgbvaY2TYaKUXE_i3FNNMqSj';
 

// SAVE DATA TO FILE

// If set to TRUE, the form input will be saved in a delimited file
 

$save_to_file = TRUE;
 

// STILL SEND EMAIL

// If saving the data to a file, still have the script send the email?
 

$save_email = TRUE;
 

// DATA PATH

// The file that will be written to - make sure it has write access
 

$save_path = 'data.txt';
 

// DELIMITER

// Fields will be separated by this character. If this character is found in

// the actual data, it will be removed.
 

$save_delimiter = '|';
 

// NEWLINES

// Newlines in the data will be replaced by this
 

$save_newlines = "<br>";
 

// TIMESTAMP

// Add date/time to the beginning of each line 

// Uses the PHP date format: http://us.php.net/date

// Leave blank to disable this feature
 

$save_timestamp = "m-d-Y h:i:s A";
 
 
 

/*

** END OF OPTIONS 

*/
 
 

if (!defined('PHP_EOL')) define ('PHP_EOL', strtoupper(substr(PHP_OS,0,3) == 'WIN') ? "\r\n" : "\n");
 
 

if (trim($path_contact_page) == '') {

	$path_contact_page = $script_path;

}
 

$verify_method = strtolower($verify_method);
 
 

/* Convert hex color code to R, G, B */

function ddfm_hex_to_rgb($h) {

	$h = trim($h, "#");

	$color = array();	

	if (strlen($h) == 6) {

		$color[] = (int)hexdec(substr($h, 0, 2));

		$color[] = (int)hexdec(substr($h, 2, 2));

		$color[] = (int)hexdec(substr($h, 4, 2));

	} else if (strlen($h) == 3) {

		$color[] = (int)hexdec(substr($h, 0, 1) . substr($h, 0, 1));

		$color[] = (int)hexdec(substr($h, 1, 1) . substr($h, 1, 1));

		$color[] = (int)hexdec(substr($h, 2, 1) . substr($h, 2, 1));

	}

	return $color;

}
 
 
 

/* Handle requests for verification code */

if (isset($_GET['v'])) {

	if ($_GET['v'] == '1') {
 

		$this_domain = preg_replace("/^www\./", "", $_SERVER['HTTP_HOST']);
 

		// Choose image type

		$type = '';

		if (function_exists("imagegif")) {

			$type = 'gif';

		} else if (function_exists("imagejpeg")) {

			$type = 'jpeg';

		} else if (function_exists("imagepng")) {

			$type = 'png';

		}
 

		if (trim($force_type) != '') {

			$type = $force_type;

		}
 

		// Generate verification code

		srand((double)microtime()*1000000); 

		$ddfmcode = substr(strtoupper(md5(rand(0, 999999999))), 2, 5); 

		$ddfmcode = str_replace("O", "A", $ddfmcode); // for clarity

		$ddfmcode = str_replace("0", "B", $ddfmcode);

		setcookie("ddfmcode", md5($ddfmcode), time()+3600, '/', '.' . $this_domain); 
 

		// Generate image

		header("Content-type: image/" . $type);

		header("Cache-Control: no-store, no-cache, must-revalidate"); 

		header("Cache-Control: post-check=0, pre-check=0", false); 

		header("Pragma: no-cache"); 

		header("Expires: Mon, 1 Jan 2000 01:00:00 GMT"); // Date in the past

		$image = imagecreate(60, 24);
 

		list($br, $bg, $bb) = ddfm_hex_to_rgb($verify_background);

		list($rr, $rg, $rb) = ddfm_hex_to_rgb($verify_text);
 

		$background_color = imagecolorallocate($image, $br, $bg, $bb);

		$text_color = imagecolorallocate($image, $rr, $rg, $rb);
 

		imagestring($image, 5, 8, 4, $ddfmcode, $text_color);
 

		switch ($type) {

			case 'gif': imagegif($image); break;

			case 'png': imagepng($image); break;

			case 'jpeg': imagejpeg($image, NULL, 100); break;

		}		

		imagedestroy($image);
 

		exit();

	}

}
 
 

// Load language settings

@include_once($language);
 
 

/* Check for GD support */

function ddfm_check_gd_support() {

	if (extension_loaded("gd") && (function_exists("imagegif") || function_exists("imagepng") || function_exists("imagejpeg"))) {

		return TRUE;

	} else {

		return FALSE;

	}

}
 

/* Safe str_replace */

function ddfm_str_replace($search, $replace, $subject) {

	if (isset($search)) {

		return str_replace($search, $replace, $subject);

	} else {

		return $subject;

	}

}
 

/* Check for valid URL */

function ddfm_is_valid_url($link) { 

	if (strpos($link, "http://") === FALSE) {

		$link = "http://" . $link;

	}

	$url_parts = @parse_url($link);

	if (empty($url_parts["host"])) 

		return( false );

	if (!empty($url_parts["path"])) {

		$documentpath = $url_parts["path"];

	} else {

		$documentpath = "/";

	}

	if (!empty($url_parts["query"])) {

		$documentpath .= "?" . $url_parts["query"];

	}

	$host = $url_parts["host"];

	$port = $url_parts["port"];

	if (empty($port)) 

		$port = "80";

	$socket = @fsockopen( $host, $port, $errno, $errstr, 30 );

	if (!$socket) {

		return(false);

	} else  {

		fwrite ($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\nUser-Agent: DDFMVerify\r\n\r\n");

		$http_response = fgets( $socket, 22 );

		if (ereg("200 OK", $http_response, $regs)) {

			return(true);

			fclose($socket);

		} else {

			return(false);

		}

	}

}
 
 

/* Check for valid email address */

function dd_is_valid_email($email) {
 

	$validator = new EmailAddressValidator;

	if ($validator->check_email_address($email)) {

		return TRUE;

	} else {

		return FALSE;

	}

} 
 

    /*

        EmailAddressValidator Class

        http://code.google.com/p/php-email-address-validation/
 

        Released under New BSD license

        http://www.opensource.org/licenses/bsd-license.php

    */
 

    class EmailAddressValidator {
 

        /**

         * Check email address validity

         * @param   strEmailAddress     Email address to be checked

         * @return  True if email is valid, false if not

         */

         function check_email_address($strEmailAddress) {

            

            // If magic quotes is "on", email addresses with quote marks will

            // fail validation because of added escape characters. Uncommenting

            // the next three lines will allow for this issue.

            //if (get_magic_quotes_gpc()) { 

            //    $strEmailAddress = stripslashes($strEmailAddress); 

            //}
 

            // Control characters are not allowed

            if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $strEmailAddress)) {

                return false;

            }
 

            // Split it into sections using last instance of "@"

            $intAtSymbol = strrpos($strEmailAddress, '@');

            if ($intAtSymbol === false) {

                // No "@" symbol in email.

                return false;

            }

            $arrEmailAddress[0] = substr($strEmailAddress, 0, $intAtSymbol);

            $arrEmailAddress[1] = substr($strEmailAddress, $intAtSymbol + 1);
 

            // Count the "@" symbols. Only one is allowed, except where 

            // contained in quote marks in the local part. Quickest way to

            // check this is to remove anything in quotes.

            $arrTempAddress[0] = preg_replace('/"[^"]+"/'

                                             ,''

                                             ,$arrEmailAddress[0]);

            $arrTempAddress[1] = $arrEmailAddress[1];

            $strTempAddress = $arrTempAddress[0] . $arrTempAddress[1];

            // Then check - should be no "@" symbols.

            if (strrpos($strTempAddress, '@') !== false) {

                // "@" symbol found

                return false;

            }
 

            // Check local portion

            if (!$this->check_local_portion($arrEmailAddress[0])) {

                return false;

            }
 

            // Check domain portion

            if (!$this->check_domain_portion($arrEmailAddress[1])) {

                return false;

            }
 

            // If we're still here, all checks above passed. Email is valid.

            return true;
 

        }
 

        /**

         * Checks email section before "@" symbol for validity

         * @param   strLocalPortion     Text to be checked

         * @return  True if local portion is valid, false if not

         */

         function check_local_portion($strLocalPortion) {

            // Local portion can only be from 1 to 64 characters, inclusive.

            // Please note that servers are encouraged to accept longer local

            // parts than 64 characters.

            if (!$this->check_text_length($strLocalPortion, 1, 64)) {

                return false;

            }

            // Local portion must be:

            // 1) a dot-atom (strings separated by periods)

            // 2) a quoted string

            // 3) an obsolete format string (combination of the above)

            $arrLocalPortion = explode('.', $strLocalPortion);

            for ($i = 0, $max = sizeof($arrLocalPortion); $i < $max; $i++) {

                 if (!preg_match('.^('

                                .    '([A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]' 

                                .    '[A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]{0,63})'

                                .'|'

                                .    '("[^\\\"]{0,62}")'

                                .')$.'

                                ,$arrLocalPortion[$i])) {

                    return false;

                }

            }

            return true;

        }
 

        /**

         * Checks email section after "@" symbol for validity

         * @param   strDomainPortion     Text to be checked

         * @return  True if domain portion is valid, false if not

         */

         function check_domain_portion($strDomainPortion) {

            // Total domain can only be from 1 to 255 characters, inclusive

            if (!$this->check_text_length($strDomainPortion, 1, 255)) {

                return false;

            }

            // Check if domain is IP, possibly enclosed in square brackets.

            if (preg_match('/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'

               .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/'

               ,$strDomainPortion) || 

                preg_match('/^\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'

               .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\]$/'

               ,$strDomainPortion)) {

                return true;

            } else {

                $arrDomainPortion = explode('.', $strDomainPortion);

                if (sizeof($arrDomainPortion) < 2) {

                    return false; // Not enough parts to domain

                }

                for ($i = 0, $max = sizeof($arrDomainPortion); $i < $max; $i++) {

                    // Each portion must be between 1 and 63 characters, inclusive

                    if (!$this->check_text_length($arrDomainPortion[$i], 1, 63)) {

                        return false;

                    }

                    if (!preg_match('/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|'

                       .'([A-Za-z0-9]+))$/', $arrDomainPortion[$i])) {

                        return false;

                    }

                }

            }

            return true;

        }
 

        /**

         * Check given text length is between defined bounds

         * @param   strText     Text to be checked

         * @param   intMinimum  Minimum acceptable length

         * @param   intMaximum  Maximum acceptable length

         * @return  True if string is within bounds (inclusive), false if not

         */

         function check_text_length($strText, $intMinimum, $intMaximum) {

            // Minimum and maximum are both inclusive

            $intTextLength = strlen($strText);

            if (($intTextLength < $intMinimum) || ($intTextLength > $intMaximum)) {

                return false;

            } else {

                return true;

            }

        }
 

    }
 
 
 
 

/* Check for injection characters */

function ddfm_injection_chars($s) {

	return (eregi("\r", $s) || eregi("\n", $s) || eregi("%0a", $s) || eregi("%0d", $s)) ? TRUE : FALSE;

}
 
 

/* Make output safe for the browser */

function ddfm_bsafe($input) {

	return htmlspecialchars(stripslashes($input));

}
 
 
 
 

function ddfm_stripslashes($s) {

	if (get_magic_quotes_gpc()) {

		return stripslashes($s);

	} else {

		return $s;

	}

}
 
 
 

function ddfm_injection_test($str) { 

	$tests = array("/bcc\:/i", "/Content\-Type\:/i", "/Mime\-Version\:/i", "/cc\:/i", "/from\:/i", "/to\:/i", "/Content\-Transfer\-Encoding\:/i"); 

	return preg_replace($tests, "", $str); 

} 
 
 
 

function ddfm_send_mail($recipients, $sender_name, $sender_email, $email_subject, $email_msg, $attach_save, $attach_path, $attachments = false) {
 

	$extra_recips = '';
 

	// generate recipient data from list

	if (strpos($recipients, '|')) {
 

		$rdata = array();

		$ri = 0;

		$rtmp = explode('|', $recipients);

		foreach ($rtmp as $rd) {

			if (trim($rd) != "") {

				list($m, $e) = (array)explode("=", trim($rd), 2);

				$rdata[$ri]['m'] = trim(strtolower($m));

				$rdata[$ri]['e'] = trim($e);

				$ri++;

			}

		}	
 

		rsort($rdata);
 

		$r_to = array();

		$extra_recips = "";

		foreach ($rdata as $r) { 

			if ($r['m'] == 'to') $r_to[] = $r['e'];	

			if ($r['m'] == 'cc') $extra_recips .= 'cc: ' . $r['e'] . PHP_EOL;		

			if ($r['m'] == 'bcc') $extra_recips .= 'bcc: ' . $r['e'] . PHP_EOL;	

		}

		$send_to = implode(', ', $r_to);

	

	} else {

		$send_to = trim($recipients);

	}
 
 

	$sender_name = ddfm_injection_test($sender_name);

	$sender_email = ddfm_injection_test($sender_email);

	$email_subject = ddfm_injection_test($email_subject);

	

	if (function_exists(mb_encode_mimeheader)) {

	$email_subject = mb_encode_mimeheader($email_subject, 'UTF-8', 'Q', '');

	$sender_name = mb_encode_mimeheader($sender_name, 'UTF-8', 'Q', '');

	}
 
 

	if (trim($sender_name) == "") {

		$sender_name = 'Anonymous';

	}

	if (trim($sender_email) == "") {

		$sender_email = 'user@domain.com';

	}

	if (trim($email_subject) == "") {

		$email_subject = 'Contact Form';

	}
 
 

	$mime_boundary = md5(time()); 
 

	$headers = '';

	$msg = '';
 
 

	$headers .= 'From: ' . $sender_name . ' <' . $sender_email . '>' . PHP_EOL;

	$headers .= $extra_recips;

	$headers .= 'Reply-To: ' . $sender_name . ' <' . $sender_email . '>' . PHP_EOL;

	$headers .= 'Return-Path: ' . $sender_name . ' <' . $sender_email . '>' . PHP_EOL;

	$headers .= "Message-ID: <" . time() . "ddfm@" . $_SERVER['SERVER_NAME'] . ">" . PHP_EOL;

	$headers .= 'X-Sender-IP: ' . $_SERVER["REMOTE_ADDR"] . PHP_EOL;

	$headers .= "X-Mailer: PHP v" . phpversion() . PHP_EOL;
 

	$headers .= 'MIME-Version: 1.0' . PHP_EOL;

//	$headers .= 'Content-Type: multipart/related; boundary="' . $mime_boundary . '"';

	$headers .= 'Content-Type: multipart/mixed; boundary="' . $mime_boundary . '"';
 

	$msg .= '--' . $mime_boundary . PHP_EOL;

	$msg .= 'Content-Type: text/plain; charset="utf-8"' . PHP_EOL;

//	$msg .= 'Content-Type: text/plain; charset="iso-8859-1"' . PHP_EOL;
 

	$msg .= 'Content-Transfer-Encoding: 8bit' . PHP_EOL . PHP_EOL;
 

	$msg .= $email_msg . PHP_EOL . PHP_EOL;
 

	if (count($attachments) > 0) {
 

		for ($i = 0; $i < count($attachments); $i++) { 
 

			if (is_file($attachments[$i]['tmpfile'])) {
 

				if ($save_files) {
 

					if (!rename($attachments[$i]['tmpfile'], $attach_path . $attachments[$i]['file'])) {

						echo 'Error saving file. Check your path and permissions. Stopping script.';

						exit();

					}
 

				} else {
 

					$handle = fopen($attachments[$i]['tmpfile'], 'rb');

					$f_contents = fread($handle, filesize($attachments[$i]['tmpfile'])); 

					$f_contents = chunk_split(base64_encode($f_contents));

					fclose($handle);		
 

					$msg .= '--' . $mime_boundary . PHP_EOL;

					$msg .= 'Content-Type: application/octet-stream; name="' . $attachments[$i]['file'] . '"' . PHP_EOL;

					$msg .= 'Content-Transfer-Encoding: base64' . PHP_EOL;

					$msg .= 'Content-Disposition: attachment; filename="' . $attachments[$i]['file'] . '"' . PHP_EOL . PHP_EOL; 

					$msg .= $f_contents . PHP_EOL . PHP_EOL;
 

				}
 

			}

       

		}

	}
 

	$msg .= '--' . $mime_boundary . '--' . PHP_EOL . PHP_EOL;
 

	@ini_set('sendmail_from', $sender_email);

	$send_status = mail($send_to, $email_subject, $msg, $headers, '-f webmaster@adirondackchamplainguideservice.com');

	@ini_restore('sendmail_from');
 

	return $send_status;

}
 
 
 
 
 

$form_input = array();
 
 
 
 

// START of functions to show form output
 
 

function ddfm_gen_html($item) {
 

	// type=html|text=
 

	$gen = $item['text'] . "\n";
 

	return $gen;

}
 
 

function ddfm_gen_date($item) {
 

	// type=date|class=|label=|fieldname=|req=(TRUEFALSE)
 

	global $form_submitted, $form_input, $show_required;
 
 

	$req_text = (($show_required) && ($item['req'] == 'true')) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";

	$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . '">' . $req_text . $item['label'] . '</label>';

	$gen .= '<input class="' . $item['class'] . '" type="text" name="' . $item['fieldname'] . '" id="' . $item['fieldname'] . '" value="';
 

	if ($form_submitted) {

		$gen .= ddfm_bsafe($form_input[$item['fieldname']]);

	} else if (isset($item['default'])) {

		$gen .= ddfm_bsafe($item['default']);

	}
 

	$gen .= '" />';
 

	global $script_path;
 

	$i = strrpos($script_path, "/");

	$tmp_path = substr($script_path, 0, $i);

	

	// $gen .= '<input type="button" value="select" onclick="displayDatePicker(\'' . $item['fieldname'] . '\', this);">';

	$gen .= '<img src="' . rtrim($tmp_path, '/') . '/calendar.gif" alt=""  onclick="displayDatePicker(\'' . $item['fieldname'] . '\', this);" />';
 
 

	$gen .='</p>' . "\n\n";
 

	return $gen;

}
 
 
 

function ddfm_gen_text($item) {
 

	// type=text|class=|label=|fieldname=|max=|req=(TRUEFALSE)|[ver=]|[default=]
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = (($show_required) && ($item['req'] == 'true')) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";

	$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . '">' . $req_text . $item['label'] . '</label>';

	$gen .= '<input class="' . $item['class'] . '" type="text" name="' . $item['fieldname'] . '" id="' . $item['fieldname'] . '" value="';
 

	if ($form_submitted) {

		$gen .= ddfm_bsafe($form_input[$item['fieldname']]);

	} else if (isset($item['default'])) {

		$gen .= ddfm_bsafe($item['default']);

	}
 

	$gen .= '" /></p>' . "\n\n";
 

	return $gen;

}
 
 
 

function ddfm_gen_password($item) {
 

	// type=password|class=|label=|fieldname=|max=|req=(TRUEFALSE)|confirm=(TRUEFALSE)
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = (($show_required) && $item['req'] == 'true') ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";

	$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . '">' . $req_text . $item['label'] . '</label>' . "\n";

	$gen .= '<input class="' . $item['class'] . '" type="password" name="' . $item['fieldname'] . '" id="' . $item['fieldname'] . '" value="';

	$gen .= '" /></p>' . "\n\n";
 

	if ($item['confirm'] == 'true') {
 

		// Duplicate field (add 'c' to end)

		$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . 'c">' . $req_text . DDFM_CONFIRMPASS . ' ' . $item['label'] . '</label>' . "\n";

		$gen .= '<input class="' . $item['class'] . '" type="password" name="' . $item['fieldname'] . 'c" id="' . $item['fieldname'] . 'c" value="';

		$gen .= '" /></p>' . "\n\n";
 

	}
 

	return $gen;

}
 
 
 

function ddfm_gen_textarea($item) {
 

	// type=textarea|class=|label=|fieldname=|max=|rows=|req=(TRUEFALSE)|[default=]
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = (($show_required) && $item['req'] == 'true') ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";

	$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . '">' . $req_text . $item['label'] . '</label>' . "\n";

	$gen .= '<textarea class="' . $item['class'] . '" name="' . $item['fieldname'] . '" cols="20" rows="' . $item['rows'] . '" id="' . $item['fieldname'] . '">';
 

	if ($form_submitted) {

		$gen .= ddfm_bsafe($form_input[$item['fieldname']]);

	} else if (isset($item['default'])) {

		$gen .= ddfm_bsafe($item['default']);

	}
 

	$gen .= '</textarea></p>' . "\n\n";
 

	return $gen;

}
 
 
 

function ddfm_gen_widetextarea($item) {
 

	// type=widetextarea|class=|label=|fieldname=|max=|rows=|req=(TRUEFALSE)|[default=]
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = (($show_required) && $item['req'] == 'true') ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";

	$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . '" class="fmtextlblwide">' . $req_text . $item['label'] . '</label>' . "\n";

	$gen .= '<textarea class="' . $item['class'] . '" name="' . $item['fieldname'] . '" cols="20" rows="' . $item['rows'] . '" id="' . $item['fieldname'] . '">';
 

	if ($form_submitted) {

		$gen .= ddfm_bsafe($form_input[$item['fieldname']]);

	} else if (isset($item['default'])) {

		$gen .= ddfm_bsafe($item['default']);

	}
 

	$gen .= '</textarea></p>' . "\n\n";
 

	return $gen;

}
 
 
 

function ddfm_gen_verify($item) {
 

	// type=verify|class=|label=
 

	global $verify_method, $show_required, $script_path;
 

	if ($verify_method != 'basic') return '';
 

	$req_text = ($show_required) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";
 

	if (ddfm_check_gd_support()) {

		$gen .= '<p class="fieldwrap"><label for="fm_verify">' . $req_text . $item['label'] . '</label>' . "\n";

		$gen .= '<input class="'. $item['class'] . '" type="text" name="fm_verify" id="fm_verify" />' . "\n";

		$gen .= '<img width="60" height="24" src="' . $script_path . '?v=1" alt="' . $item['label'] . '" title="' . $item['label'] . '" />';

		$gen .= '</p>' . "\n\n";

	}
 

	return $gen;

}
 
 

function ddfm_gen_fullblock($item) {
 

	// type=fullblock|class=|text=
 

	$gen = "";
 

	$gen .= '<div class="' . $item['class'] . '"><p class="fieldwrap">' . "\n";

	$gen .= $item['text'] . "\n";

	$gen .= '</p></div>' . "\n\n";
 

	return $gen;

}
 
 

function ddfm_gen_halfblock($item) {
 

	// type=halfblock|class=|text=
 

	$gen = "";
 

	$gen .= '<div class="' . $item['class'] . '"><p class="fieldwrap">' . "\n";

	$gen .= $item['text'] . "\n";

	$gen .= '</p></div>' . "\n\n";
 

	return $gen;

}
 

  

function ddfm_gen_openfieldset($item) {
 

	// type=openfieldset|legend=
 

	$gen = "";
 

	$gen .= '<fieldset><legend>' . ddfm_bsafe($item['legend']) . '</legend>' . "\n\n";
 

	return $gen;

}
 
 

function ddfm_gen_closefieldset($item) {
 

	// type=closefieldset
 

	$gen = "";
 

	$gen .= '</fieldset>' . "\n\n";
 

	return $gen;

}
 
 

function ddfm_gen_checkbox($item) {
 

	// type=checkbox|class=|label=|data=

	//	 (fieldname),(text),(CHECKED),(REQUIRED),

	//	 (fieldname),(text),(CHECKED),(REQUIRED),

	//	 (fieldname),(text),(CHECKED),(REQUIRED)
 

	global $form_submitted, $form_input, $show_required;
 

	$gen = "";
 

	$gen .= '<p class="fieldwrap"><label>' . $item['label'] . '</label><span class="' . $item['class'] . '">' . "\n";
 

	$item['data'] = str_replace(",,", "C0mM@", $item['data']);

	$data = explode(",", trim($item['data']));

	$data = str_replace("C0mM@", ",", $data);
 

	for ($i = 0; $i < sizeof($data); $i+=4) {
 

		$req_text = (($show_required) && ($data[$i+3] == 'true')) ? ' <span class="required">' . DDFM_REQUIREDTAG . '</span>' : '';
 

		$gen .= '<input type="checkbox" name="' . $data[$i] . '" id="' . $data[$i] . '" value="' . $data[$i + 1] . '"';
 

		if ($form_submitted) {

			if ((isset($form_input[$data[$i]])) && (trim($form_input[$data[$i]]) != '')) {

				$gen .= ' checked="checked"';

			}

		} else {

			if ($data[$i + 2] == 'true') {

				$gen .= ' checked="checked"';

			}

		}
 

		$gen .= ' /><label for="' . $data[$i] . '" style="display: inline; float: none; clear: none; text-align: left; margin: 0; padding: 0;">' . $data[$i + 1] . $req_text . '</label>' . "\n";

		$gen .= '<br />';

	}
 

	$gen .= '</span></p>' . "\n\n";
 

	return $gen;

}
 
 

function ddfm_gen_radio($item) {
 

	//  type=radio|class=|label=|fieldname=|req=|[default=]|data=

	//	  (text),(text),(text)
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = (($show_required) && ($item['req'] == 'true')) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";
 

	$gen .= '<p class="fieldwrap"><label>' . $req_text . $item['label'] . '</label><span class="' . $item['class'] . '">' . "\n";

	

	$c = 1;
 

	$item['data'] = str_replace(",,", "C0mM@", $item['data']);

	$data = explode(",", trim($item['data']));

	$data = str_replace("C0mM@", ",", $data);

	

	for ($i = 0; $i < sizeof($data); $i++) {
 

		$gen .= '<input type="radio" name="' . $item['fieldname'] . '" id="' . $data[$i] . '" value="' . $data[$i] . '"';
 

		if ($form_submitted) {

			if (trim($form_input[$item['fieldname']]) == $data[$i]) {

				$gen .= ' checked="checked"';

			}

		} else {

			if ($c == $item['default']) {

				$gen .= ' checked="checked"';

			}

		}
 

		$gen .= ' /><label for="' . $data[$i] . '" style="display: inline; float: none; clear: none; text-align: left; margin: 0; padding: 0;">' . $data[$i] . '</label>' . "\n";

		$gen .= '<br />';
 

		$c++;

	}
 

	$gen .= '</span></p>' . "\n\n";
 

	return $gen;

}
 
 
 

function ddfm_gen_select($item) {
 

	//	type=select|class=|label=|fieldname=|multi=(TRUEFALSE)|data=

	//    (#group),(text),(text),(#group),(text),(text)
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = (($show_required) && ($item['req'] == 'true')) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";
 

	$gen .= '<p class="fieldwrap"><label>' . $req_text . $item['label'] . '</label><select class="' . $item['class'] . '" name="' . $item['fieldname'];
 

	if ($item['multi'] == 'true') {

		$gen .= '[]';

	}
 

	$gen .= '"';
 

	if ($item['multi'] == 'true') {

		$gen .= ' multiple="multiple"';

	}
 

	$gen .= '>' . "\n";

	

	$c = 1;
 

	$og = FALSE;
 

	$item['data'] = str_replace(",,", "C0mM@", $item['data']);

	$data = explode(",", trim($item['data']));

	$data = str_replace("C0mM@", ",", $data);
 

	for ($i = 0; $i < sizeof($data); $i++) {
 

		if (substr($data[$i], 0, 1) == '#' ) {
 

			if ($og) {

				$gen .= '</optgroup>' . "\n";	

			}

			$gen .= '<optgroup label="' . ltrim($data[$i], '#') . '">' . "\n";

			$og = TRUE;
 

		} else {
 

			$gen .= '<option';
 

			if ($form_submitted) {

		

				if ($item['multi'] == 'true') {
 

					foreach ((array)$form_input[$item['fieldname']] as $ii) {
 

						if ($data[$i] == $ii) {

							$gen .= ' selected="selected"';

						}

					}

			

				} else {
 

					if (trim($form_input[$item['fieldname']]) == $data[$i]) {

						$gen .= ' selected="selected"';

					}
 

				}

			} 
 

			$gen .= ' >' . $data[$i] . '</option>' . "\n";

		}
 

		$c++;

	}
 

	if ($og) {

		$gen .= '</optgroup>' . "\n";	

		$og = FALSE;

	} 
 

	$gen .= '</select></p>' . "\n\n";
 

	return $gen;

}
 
 

function ddfm_gen_file($item) {
 

	// type=file|class=|label=|fieldname=|req=(TRUEFALSE)|[allowed=1,2,3]
 

	global $form_submitted, $form_input, $show_required, $max_file_size;
 

	$req_text = (($show_required) && ($item['req'] == 'true')) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";
 

	$gen .= '<p class="fieldwrap"><label for="' . $item['fieldname'] . '">' . $req_text . $item['label'] . '</label>' . "\n";

	$gen .= '<input class="' . $item['class'] . '" type="file" name="' . $item['fieldname'] . '" id="' . $item['fieldname'] . '" ';

	$gen .= ' /></p>' . "\n\n";
 

	return $gen;

}
 
 

function ddfm_gen_selrecip($item) {
 

	// type=selrecip|class=|label=|data=User1,user1@domain.com,User2 etc..
 

	global $form_submitted, $form_input, $show_required;
 

	$req_text = ($show_required) ? '<span class="required">' . DDFM_REQUIREDTAG . '</span> ' : '';
 

	$gen = "";
 

	$gen .= '<p class="fieldwrap"><label>' . $req_text . $item['label'] . '</label><select class="' . $item['class'] . '" name="fm_selrecip">' . "\n";

	
 

	$data = explode(",", trim($item['data']));
 
 

	$gen .= '<option';

	if ($form_submitted) {

		if (trim($form_input['fm_selrecip']) == $data[0]) {

			$gen .= ' selected="selected"';

		}

	}

	$gen .= ' >' . $data[0] . '</option>' . "\n";
 
 
 

	for ($i = 1; $i < sizeof($data); $i+=2) {
 

		$gen .= '<option';
 

		if ($form_submitted) {

			if (trim($form_input['fm_selrecip']) == $data[$i]) {

				$gen .= ' selected="selected"';

			}

		}
 

		$gen .= ' >' . $data[$i] . '</option>' . "\n";

	}
 

	$gen .= '</select></p>' . "\n\n";
 

	return $gen;
 

}
 
 

// END of functions to show form output
 
 

	

/* Generate the script output */
 
 

		// convert $form_struct into array of strings

		$form_struct = (array)explode('<br />', nl2br(trim($form_struct)));
 

		// Prepare globals

		$form_submitted = FALSE;
 

		$message_sent = FALSE;
 
 

		// Prepare output
 

		$o = "\n\n\n" . '<!-- START of Dagon Design Formmailer output -->' . "\n\n";
 
 
 

		// Convert form structure to multi-dimensional array
 

		$fs_tmp1 = array();

		$fs_tmp2 = array();

		$fitem = 0;
 

		foreach ($form_struct as $fs) {

			if (trim($fs) != "") {

				$fs_tmp1 = (array)explode("|", trim($fs));

				foreach ($fs_tmp1 as $fs1) {

					list($k, $v) = (array)explode("=", trim($fs1), 2);	
 

					$fs_tmp2[$fitem][$k] = $v;

				}			

			}
 

			$fitem++;

		}

		$form_struct = $fs_tmp2;
 
 
 

		// Make sure form structure is not missing empty keys
 

		$valid_keys = array('fieldname', 'type', 'req', 'label', 'max', 'ver', 'confirm', 'data', 'multi', 'allowed', 'default');
 

		for ($i = 0; $i < count($form_struct); $i++) {

			foreach ($valid_keys as $k) {

				if (!isset($form_struct[$i][$k])) $form_struct[$i][$k] = NULL;

			}

		}

	

	
 
 

	// Was form submitted?
 

	if (isset($_POST["form_submitted"])) {
 
 
 

		$form_submitted = TRUE;
 

		$mail_message = "";

		$csv = "";

		
 

		$orig_auto_reply_message = $auto_reply_message;

		$auto_reply_message = '';

				

		// make correct encoding in auto - sokai - BEGIN

		$mime_boundary = md5(time());

		$auto_reply_message .= '--' . $mime_boundary . PHP_EOL;

		$auto_reply_message .= 'Content-Type: text/plain; charset=utf-8' . PHP_EOL;

		$auto_reply_message .= 'Content-Transfer-Encoding: 8bit' . PHP_EOL . PHP_EOL;

		// make correct encoding in auto - sokai - END
 

		$attached_files = array();

		$attached_index = 0;
 

		$sel_recip = NULL;
 

		$message_structure = trim($message_structure);
 
 
 

		$auto_reply_message .= $orig_auto_reply_message;
 
 
 

		unset($errors);

		$errors = array();
 
 

		if ($verify_method == 'recaptcha') {

			@include_once('dd-formmailer/recaptchalib.php');

			$privatekey = $re_private_key;

			$resp = recaptcha_check_answer ($privatekey,

                                $_SERVER["REMOTE_ADDR"],

                                $_POST["recaptcha_challenge_field"],

                                $_POST["recaptcha_response_field"]);

			if (!$resp->is_valid) {

				$errors[] = DDFM_INVALIDVER;

			}

		}
 
 
 

		// Get form input and put in array
 

		foreach ($_POST as $key => $i) {
 

			if ($key != "form_submitted") {

				if (!is_array($i)) {

					$form_input[strtolower($key)] = trim($i);

				} else {

					$form_input[strtolower($key)] = $i;

				}

			}
 

		}
 

		

		$msg_field_sep = ': ';

		$msg_field_line_end = "\n\n";
 
 

		$fsindex = -1;
 

		// Validate input

		foreach ($form_struct as $fs) {

		

			if (!isset($form_input[$fs['fieldname']])) {

				$form_input[$fs['fieldname']] = '';

			}
 

			$fsindex++;
 

			// check for fields used in vars

			if (isset($form_input[$fs['fieldname']])) {

				$sender_name = ddfm_str_replace($fs['fieldname'], ddfm_stripslashes($form_input[$fs['fieldname']]), $sender_name);

				$sender_email = ddfm_str_replace($fs['fieldname'], ddfm_stripslashes($form_input[$fs['fieldname']]), $sender_email);

				$email_subject = ddfm_str_replace($fs['fieldname'], ddfm_stripslashes($form_input[$fs['fieldname']]), $email_subject);

			}
 

			switch ($fs['type']) {
 

				case 'text':
 

					// type=text|class=|label=|fieldname=|max=|req=(TRUEFALSE)|[ver=]|[default=]
 

					$t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 

					if ((strtolower($fs['req']) == 'true') && ($t == "")) { 
 

						$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 

					} else if (strlen($t) > (int)$fs['max']) {
 

						$errors[] = $fs['max'] . ' ' . DDFM_MAXCHARLIMIT . " '" . $fs['label'] . "'";
 

					} else if (ddfm_injection_chars($t)) {
 

						$errors[] = DDFM_INVALIDINPUT . " '" . $fs['label'] . "'";
 

					} else	if ((strtolower($fs['ver']) == 'email') && ((strtolower($fs['req']) == "true") || ($t != ""))) {
 

						if (!dd_is_valid_email($t)) $errors[] = DDFM_INVALIDEMAIL . " '" . $fs['label'] . "'";
 

					} else if ((strtolower($fs['ver']) == 'url') && ((strtolower($fs['req']) == "true") || ($t != ""))) {
 

						if (!ddfm_is_valid_url($t)) $errors[] = DDFM_INVALIDURL . " '" . $fs['label'] . "'";
 

					} 
 

					$csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;

					$mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;

					$message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);

					$auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);

					$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);

					

					

				break;
 

				case 'password':
 

					// type=password|class=|label=|fieldname=|max=|req=(TRUEFALSE)|confirm=(TRUEFALSE)
 

					$t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 

					if ((strtolower($fs['req']) == 'true') && ($t == "")) {
 

						$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";

		

					} else if (strlen($t) > (int)$fs['max']) {
 

						$errors[] = $fs['max'] . ' ' . DDFM_MAXCHARLIMIT . " '" . $fs['label'] . "'";
 

					} else if (ddfm_injection_chars($t)) {
 

						$errors[] = DDFM_INVALIDINPUT . " '" . $fs['label'] . "'";
 

					} else if (strtolower($fs['confirm']) == 'true') {
 

						$tc = ddfm_stripslashes($form_input[$fs['fieldname']  . 'c']);

			

						if ($t != $tc) $errors[] = DDFM_NOMATCH . " '" . $fs['label'] . "'";
 

					}
 

					$csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;

					$mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;

					$message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);

					$auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);

					$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
 

					break;
 

				case 'textarea':

				case 'widetextarea':

			

					// type=textarea|class=|label=|fieldname=|max=|rows=|req=(TRUEFALSE)|[default=]
 

					$t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 

					if ((strtolower($fs['req']) == 'true') && ($t == "")) {
 

						$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 

					} else if (strlen($t) > (int)$fs['max']) {

			

						$errors[] = $fs['max'] . ' ' . DDFM_MAXCHARLIMIT . " '" . $fs['label'] . "'";
 

					}
 

					$csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;

					$mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;

					$message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);

					$auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);

					$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
 

					break;				
 

				case 'verify':
 

					// type=verify|class=|label=
 

					if ($verify_method == 'basic') {
 

						$t = ddfm_stripslashes($form_input['fm_verify']);
 

						if ($t == "") {
 

							$errors[] = DDFM_MISSINGVER;
 

						} else if (trim($_COOKIE["ddfmcode"]) == "") {
 

							$errors[] = DDFM_NOVERGEN;
 

						} else if ($_COOKIE["ddfmcode"] != md5(strtoupper($t))) { 
 

							$errors[] = DDFM_INVALIDVER;
 

						} 
 

					}
 

					break;
 

				case 'checkbox':
 

					//  type=checkbox|class=|label=|data=

					//	  (fieldname),(text),(CHECKED),(REQUIRED),

					//	  (fieldname),(text),(CHECKED),(REQUIRED),

					//	  (fieldname),(text),(CHECKED),(REQUIRED)
 

					$data = explode(",", trim($fs['data']));
 

					$tmp_msg = array();
 

					for ($i = 0; $i < count($data); $i+=4) {

						

						$t = '';

						if (isset($form_input[$data[$i]])) {

							$t = ddfm_stripslashes(trim($form_input[$data[$i]]));

						}
 

						if ((strtolower($data[$i+3]) == 'true') && ($t == "")) {

							$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";

						}
 

						if ($t != "") $tmp_msg[] = $t;
 

						$message_structure = ddfm_str_replace($data[$i], $t, $message_structure);

						$auto_reply_message = ddfm_str_replace($data[$i], $t, $auto_reply_message);

						$sent_message = ddfm_str_replace($data[$i], ddfm_bsafe($t), $sent_message);
 
 

					}
 

					$csv .= str_replace($save_delimiter, ' ', implode(', ', $tmp_msg)) . $save_delimiter;

					$mail_message .= $fs['label'] . $msg_field_sep . implode(', ', $tmp_msg) . $msg_field_line_end;
 

					break;

				

				case 'radio':
 

					//  type=radio|class=|label=|fieldname=|req=|[default=]|data=

					//	  (text),(text),(text),(text)
 

					$t = ddfm_stripslashes(trim($form_input[$fs['fieldname']]));
 

					if ((strtolower($fs['req']) == 'true') && ($t == "")) {
 

						$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 

					}
 

					$csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;	

					$mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;

					$message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);

					$auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);

					$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 

					break;
 

				case 'select':
 

					//  type=select|class=|label=|fieldname=|multi=(TRUEFALSE)|data=

					//    (#group),(text),(text),(#group),(text),(text)
 

					$data = explode(",", trim($fs['data']));
 

					if (strtolower($fs['multi']) != 'true') {				
 

						$t = ddfm_stripslashes($form_input[$fs['fieldname']]);

						

						$first_item = $data[0];
 

						if ((strtolower($fs['req']) == 'true') && (($t == "") || ($t == $first_item))) {
 

							$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 

						}

					

						$csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;

						$mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;

						$message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);

						$auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);

						$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
 

					} else { // multi = true

	

						$t = (array)$form_input[$fs['fieldname']];
 

						if ((count($t) == 1) && ($t[0] == '')) {

							unset($t[0]);

						}
 

						if ((strtolower($fs['req']) == 'true') && (count($t) == 0)) {

							$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";

						}

						

						$tmp_msg = array();
 

						foreach ($t as $tt) {

							if ($tt != "") $tmp_msg[] = $tt;

						}
 

						$csv .= str_replace($save_delimiter, ' ', implode(', ', $tmp_msg)) . $save_delimiter;

						$mail_message .= $fs['label'] . $msg_field_sep . implode(', ', $tmp_msg) . $msg_field_line_end;

						$message_structure = ddfm_str_replace($fs['fieldname'], implode(', ', $tmp_msg), $message_structure);

						$auto_reply_message = ddfm_str_replace($fs['fieldname'], implode(', ', $tmp_msg), $auto_reply_message);

						$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe(implode(', ', $tmp_msg)), $sent_message);

				

					}
 

					break;
 

				case 'file':
 

					// type=file|class=|label=|fieldname=|[req=]|[allowed=1,2,3]
 

					if ((strtolower($fs['req']) == 'true') && (($_FILES[$fs['fieldname']]['name'] == ""))) { 

						$errors[] = DDFM_MISSINGFILE . " '" . $fs['label'] . "'";

					}

					
 

					$allowed = array();
 

					if (trim($fs['allowed']) != "") {

						$allowed = (array)explode(",", trim(strtolower($fs['allowed'])));

					}
 

					if (($_FILES[$fs['fieldname']]['name'] != "") && ((int)$_FILES[$fs['fieldname']]['size'] == 0)) {
 

							$errors[] = DDFM_FILETOOBIG . ' ' . $_FILES[$fs['fieldname']]['name'];
 

					} else if ($_FILES[$fs['fieldname']]['tmp_name'] != "") {
 

						if (($_FILES[$fs['fieldname']]['error'] == UPLOAD_ERR_OK) && ($_FILES[$fs['fieldname']]['size'] > 0)) {
 

							$origfilename = $_FILES[$fs['fieldname']]['name'];

							$filename = explode(".", $_FILES[$fs['fieldname']]['name']);

							$filenameext = $filename[count($filename) - 1];

							unset($filename[count($filename) - 1]);

							$filename = implode(".", $filename);

							$filename = substr($filename, 0, 15) . "." . $filenameext;

							$file_ext_allow = TRUE;
 

							if (count($allowed) > 0) {
 

								$file_ext_allow = FALSE;

								

								for ($x = 0; $x < count($allowed); $x++) { 

									if (strtolower($filenameext) == strtolower($allowed[$x])) {

										$file_ext_allow = TRUE;

									}

								} 

							}

							if ($file_ext_allow) {
 

								if((int)$_FILES[$fs['fieldname']]['size'] < $max_file_size) {
 

									$attached_files[$attached_index]['file'] = $_FILES[$fs['fieldname']]['name']; 

									$attached_files[$attached_index]['tmpfile'] = $_FILES[$fs['fieldname']]['tmp_name']; 

									$attached_files[$attached_index]['content_type'] = $_FILES[$fs['fieldname']]['type']; 

									$attached_index++;
 

									$csv .= str_replace($save_delimiter, ' ', $_FILES[$fs['fieldname']]['name']) . $save_delimiter;

									

									if (!$attach_save) {

										$mail_message .= DDFM_ATTACHED . $msg_field_sep . $_FILES[$fs['fieldname']]['name'] . "\n\n"; 

									}

									

									$message_structure = ddfm_str_replace($fs['fieldname'], $_FILES[$fs['fieldname']]['name'], $message_structure);

									$auto_reply_message = ddfm_str_replace($fs['fieldname'], $_FILES[$fs['fieldname']]['name'], $auto_reply_message);

									$sent_message = ddfm_str_replace($fs['fieldname'], $_FILES[$fs['fieldname']]['name'], $sent_message);					
 

								} else { 

									$errors[] = DDFM_FILETOOBIG . ' ' . $_FILES[$fs['fieldname']]['name'];

								}

							} else { 

								$errors[] = DDFM_INVALIDEXT . ' ' . $_FILES[$fs['fieldname']]['name'];

							}

						} else { 

							$errors[] = DDFM_UPLOADERR . ' ' . $_FILES[$fs['fieldname']]['name'];

						}

					} 
 

					$message_structure = ddfm_str_replace($fs['fieldname'], '', $message_structure);

					$auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);

					$sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 

					break;
 
 

				case 'selrecip':
 

					//  type=selrecip|class=|label=|data=(select),User1,user1@domain.com,User2 etc..
 

					$data = explode(",", trim($fs['data']));

					

					$t = ddfm_stripslashes($form_input['fm_selrecip']);
 

					if (($t == "") || ($t == $data[0])) {
 

						$errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 

					} else {
 

						for ($i = 1; $i < count($data); $i+=2) {
 

							if ($data[$i] == $t) {

								$sel_recip = trim($data[$i+1]);

							}

						}
 

					}	
 

					break;
 

			}
 
 

		}
 
 
 

		// make sure no un-used fieldnames are left in template

		foreach ($form_struct as $fs) {

			$message_structure = ddfm_str_replace($fs['fieldname'], '', $message_structure);

			$auto_reply_message = ddfm_str_replace($fs['fieldname'], '', $auto_reply_message);

			$sent_message = ddfm_str_replace($fs['fieldname'], '', $sent_message);

		}
 
 
 

		if (ddfm_injection_chars($sender_name)) $errors[] = DDFM_INVALIDINPUT;

		if (ddfm_injection_chars($sender_email)) $errors[] = DDFM_INVALIDINPUT;

		if (ddfm_injection_chars($email_subject)) $errors[] = DDFM_INVALIDINPUT;
 
 
 
 

		

		if ($errors) {
 

			$o .= '<div class="ddfmwrap"><div class="ddfmerrors">' . DDFM_ERRORMSG . '</div>';

			$o .= '<div class="errorlist">';

			foreach ($errors as $err) {

				$o .= $err . '<br />';

			}

			$o .= '</div><div style="clear:both;"><!-- --></div></div>';

	

		} else {
 

			if ($wrap_messages) {

				$mail_message = wordwrap($mail_message, 70);

			}
 

			if ($recipients == 'selrecip') {

				$recipients = $sel_recip;

			}
 

			// if template exists, use it instead

			if (strlen(trim($message_structure)) > 0) {

				$mail_message = $message_structure . "\n\n";

			}
 

			if ($show_ip_hostname) {

				$mail_message .= 'IP: ' . $_SERVER['REMOTE_ADDR'] . "\n" . 'HOST: ' . gethostbyaddr($_SERVER['REMOTE_ADDR']) . "\n";

			}
 
 

			$sndmsg = TRUE;

			if (($save_to_file == TRUE) && ($save_email == FALSE)) {

				$sndmsg = FALSE;

			}

			

			$csv = str_replace("\n", $save_newlines, $csv);

			$csv = str_replace("\r", '', $csv);

			$csv = substr($csv, 0, strlen($csv) - strlen($save_delimiter));
 

			if (trim($save_timestamp) != '') {

				$csv = date($save_timestamp) . $save_delimiter . $csv;

			}
 

			if (is_writable($save_path)) {

				$handle = fopen($save_path, 'a+');

				fwrite($handle, $csv . "\n");

				fclose($handle);

			}
 
 

			if ($show_url == TRUE) {

				$mail_message .= "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

			}

			
 

			if ($sndmsg == TRUE) {
 

				if (ddfm_send_mail($recipients, $sender_name, $sender_email, $email_subject, $mail_message, $attach_save, $attach_path, $attached_files)) {

		

					$o .= $sent_message;

	

					$auto_reply_name = trim($auto_reply_name);

					$auto_reply_email = trim($auto_reply_email);

					$auto_reply_subject = trim($auto_reply_subject);

					$auto_reply_message = trim($auto_reply_message);

	

					if (($orig_auto_reply_message != "") && (trim($sender_email != ""))) {

	

						$auto_reply_headers = '';
 

						$auto_reply_headers .= 'From: ' . $auto_reply_name . ' <' . $auto_reply_email . '>' . PHP_EOL;

						$auto_reply_headers .= 'Reply-To: ' . $auto_reply_name . ' <' . $auto_reply_email . '>' . PHP_EOL;

						$auto_reply_headers .= 'Return-Path: ' . $auto_reply_name . ' <' . $auto_reply_email . '>' . PHP_EOL;;

						$auto_reply_headers .= "Message-ID: <" . time() . "ddfm@" . $_SERVER['SERVER_NAME'] . ">" . PHP_EOL;

						$auto_reply_headers .= 'X-Sender-IP: ' . $_SERVER["REMOTE_ADDR"] . PHP_EOL;

						$auto_reply_headers .= "X-Mailer: PHP v" . phpversion() . PHP_EOL;
 

						$auto_reply_headers .= 'MIME-Version: 1.0' . PHP_EOL;

						$auto_reply_headers .= 'Content-Type: multipart/related; boundary="' . $mime_boundary . '"' . PHP_EOL;

						/*$auto_reply_headers .= 'Content-Type: text/plain; charset=utf-8';*/

						// make correct encoding in auto - sokai - BEGIN

						//$auto_reply_message .= PHP_EOL . PHP_EOL;

						$auto_reply_message .= PHP_EOL . PHP_EOL . '--' . $mime_boundary . '--' . PHP_EOL . PHP_EOL;

						// make correct encoding in auto - sokai - END
 

						mail($sender_email, $auto_reply_subject, $auto_reply_message, $auto_reply_headers);

					}
 

					$message_sent = TRUE;
 

					$_POST = array();
 

				} else {

					$o .= DDFM_SERVERERR;

					$message_sent = FALSE;

				}
 

			} else {

			

				$o .= $sent_message;

			

			}

	

		}
 
 

	} // end of form submission processing
 
 
 
 
 
 

	// Generate form if message has not been sent
 

	if (!$message_sent) {	
 
 

		if ($verify_method == 'basic' && !ddfm_check_gd_support()) {

			$o .= DDFM_GDERROR;

		}
 

		if (trim($manual_form_code) == '') {	// ** Use normal form generation

		

			$o .= '<div class="ddfmwrap">';

			$o .= '<form class="ddfm" method="post" action="' . $path_contact_page . '" enctype="multipart/form-data">' . "\n\n";

	

			// Loop through form items
 

			foreach ($form_struct as $f_i) {
 

				switch ($f_i['type']) {
 

					case 'html':			$o .= ddfm_gen_html($f_i);				break;

					case 'date':			$o .= ddfm_gen_date($f_i);				break;

					case 'text':			$o .= ddfm_gen_text($f_i);				break;

					case 'password':		$o .= ddfm_gen_password($f_i);			break;

					case 'textarea':		$o .= ddfm_gen_textarea($f_i);			break;

					case 'widetextarea':	$o .= ddfm_gen_widetextarea($f_i);		break;

					case 'verify':			$o .= ddfm_gen_verify($f_i);			break;

					case 'fullblock':		$o .= ddfm_gen_fullblock($f_i);			break;

					case 'halfblock':		$o .= ddfm_gen_halfblock($f_i);			break;

					case 'openfieldset':	$o .= ddfm_gen_openfieldset($f_i);		break;

					case 'closefieldset':	$o .= ddfm_gen_closefieldset($f_i);		break;

					case 'checkbox':		$o .= ddfm_gen_checkbox($f_i);			break;

					case 'radio':			$o .= ddfm_gen_radio($f_i);				break;

					case 'select':			$o .= ddfm_gen_select($f_i);			break;

					case 'file':			$o .= ddfm_gen_file($f_i);				break;				

					case 'selrecip':		$o .= ddfm_gen_selrecip($f_i);			break;

				}

			}
 

			if ($verify_method == 'recaptcha') {
 

				$o .= "<script>

				var RecaptchaOptions = {

			    theme : 'white'

				};

				</script>";
 

				@include_once('recaptchalib.php');

				$publickey = $re_public_key;
 

				$o .= '<div class="recaptcha"><div class="recaptcha-inner">';

				$o .= recaptcha_get_html($publickey);

				$o .= '</div></div>';

			}
 

			$o .= '<p><input type="hidden" name="MAX_FILE_SIZE" value="' . $max_file_size . '" /></p>' . "\n";

			$o .= '<div class="submit"><input type="submit" name="form_submitted" value="' . DDFM_SUBMITBUTTON . '" /></div>' . "\n\n";
 

			$o .= '<div class="credits">' . DDFM_CREDITS . ' <a href="http://www.dagondesign.com" title="Dagon Design">Dagon Design</a></div>' . "\n\n";
 

			$o .= '</form>';

			$o .= '</div>' . "\n\n";
 

		} else { 

			// Use manual form code
 

			$o .= $manual_form_code;
 

		}
 

		// Form generation complete
 

	} // end of display form code
 
 

	$o .= '<!-- END of Dagon Design Formmailer output -->' . "\n\n\n";
 
 
 
 

/* Page Generation */
 
 

if ($standalone) {

// START OF PAGE HEADER

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head profile="http://gmpg.org/xfn/11">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Contact</title>

<link rel="stylesheet" href="<?php echo $path_to_css; ?>" type="text/css" media="screen" />

<?php
 

	$i = strrpos($script_path, "/");

	$tmp_path = substr($script_path, 0, $i);

	$tmp_path = rtrim($tmp_path, '/');
 

?>

<script type="text/javascript" src="<?php echo $tmp_path; ?>/date_chooser.js"></script>

</head>

<body>
 

<div align="center">

<div style="width: 380px; margin: 0 auto 0 auto; text-align:left;">
 

<?php

// END OF PAGE HEADER

}
 

// show script output

echo $o; 
 

if ($standalone) {

// START OF PAGE FOOTER

?>
 

</div>

</div>
 
 

</body>

</html>
 
 

<?php

// END OF PAGE FOOTER

}
 
 

?>

Open in new window

0
Comment
Question by:fisher12188
3 Comments
 

Expert Comment

by:meoconx
ID: 22806936
your code is really long, can you extract the code which you think that for sending email and have problem with it?
0
 
LVL 13

Accepted Solution

by:
Xyptilon2 earned 500 total points
ID: 22806945
Line 672: print out the $send_status and let me know if you get back 0, "" or 1.

If you get back "" (nothing), it's probably because PHP doesn't know where your sendmail binary (or wrapper) is. If you get back 0, there's something else going on and if you get back 1 then the problem is not with PHP but with whatever is sending the email. Perhaps a wrapper of some kind.

If you have access to the machine, you can confirm whether it has left the server by looking if it is still in the queue. If not, look in your smtpd log files to see what the receiving mailserver had to say. Perhaps it doesn't like the headers in your email and returns you with a 451 error or 500 code. This happens a lot these days because of anti-spam measures.

What happens is that a reverse DNS lookup is done on the IP address in the email
and matched against the domain part of the email address (whats after the @).

A PTR record connects a name to an IP address when a reverse DNS query is being performed. This is maintained by the administrator of the IP range. Either the hosting provider or the upstream provider. Some anti-spam appliances require a matching PTR record (with the domainname of the email address).

Second, setup an SPF record in the zone file of your DNS server to specify that
that host is allowed to email on behalf of your domain. An SPF record is a TXT
record that contains information about which hosts (ips) are allowed to email
on your domains behalf.

Third, perhaps a possibility is to setup an alternative smtproute, send the emails
thru an inhouse server.

Another possibility is when the sending server (possibly a webserver) does not have a FQDN (fully qualified domain name) (the hostname). Some anti-spam appliances will reject it then.

I hope this is helpful to you..goodluck!
0
 

Author Closing Comment

by:fisher12188
ID: 31510022
I found additional errors in the code.
0

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Suggested Solutions

Resolve Outlook connectivity issues after moving mailbox to new Exchange 2016 server
Password hashing is better than message digests or encryption, and you should be using it instead of message digests or encryption.  Find out why and how in this article, which supplements the original article on PHP Client Registration, Login, Logo…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
This video teaches users how to migrate an existing Wordpress website to a new domain.

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now