funkygas Posted October 23, 2008 Share Posted October 23, 2008 Hi! I created a simple form using 'PHPformmail' to send user details through to a support ticket program. But, when it arrives it shows the reply address as 'online.submit@[mydomain.com], which screws the support program up. In my form I ask for the users reply address - is their any way to use this info? I tried, but failed. The piece of script I believe is reponsible is: $from = "online.submit@" . HOST_NAME ; I tried replacing it with the value from the form: value="<?php print HtmlSpecialChars( $HTTP_POST_VARS[ "Reply_addres" ] ); ?>" as well as a few other variations, but with no luck. My PHP skills don't stretch any further! Any ideas or suggestions? Thanks, Grant Quote Link to comment Share on other sites More sharing options...
funkygas Posted November 6, 2008 Author Share Posted November 6, 2008 ??? I've tried a few other random bits, but to no avail! Any ideas? I'll give anything a try to get this to work! Thanks, Grant Quote Link to comment Share on other sites More sharing options...
makka Posted November 9, 2008 Share Posted November 9, 2008 hey there, im slightly confused in what your asking, can you post your script? is there a problem when the email gets to you there is no email to reply to (the senders email that they have input into the form) you just get 'online.submit@[mydomain.com]'? Quote Link to comment Share on other sites More sharing options...
funkygas Posted November 20, 2008 Author Share Posted November 20, 2008 Hi! Sorry in the delay replying to your question!. When my hosting customers want to submit a support ticket, they email a designated 'support' email address which then funnels it through to a ticket system. If the email is sent via a standard email program, the information that is displayed on the ticket is similar to: Subject: Test support ticket #2 To: "'Tech Support'" From: grant@mydomain.com.au Reply-To: grant@mydomain.com.au Which allows for a simply 'reply' through the ticketing system. If I try to send an email to the same support email address, but going through my online form, it displays as: Subject: Technical Support enquiry To: support@mydomain.com.au From: online.submit@mydommain.com.au Reply-To: online.submit@mydomain.com.au which screws up the ticket as you can't reply to the reply address. So, what i'm trying to achieve is: Using my online form to make this line Reply-To: online.submit@mydomain.com.au the same as the reply address as I request in the form. Eg, in the form they fill out a field called 'Reply address' and that makes the above line display: Reply-To: johncustomer@anotherdomain.com so when in the ticketing program, when your reply it has a real email address to reply to. I hope that all makes sense! I'll put the script in a separate post. Grant Quote Link to comment Share on other sites More sharing options...
funkygas Posted November 20, 2008 Author Share Posted November 20, 2008 Here is the form script: I'll post the ohter bits next. <?php if( !$isHideForm ): global $sErr ; if( $sErr ) print "<br><a name='error'></a><center><font class='form_error' >$sErr</font></center><br>"; $starColor = $sErr ? "#ff0000" : "#000000"; $style=" class='form_text' "; ?> <form name="frmFormMail" action="<?php print PHP_SELF ?>" method='post' enctype='multipart/form-data'> <input type='hidden' name='formmail_submit' value='Y'> <input type='hidden' name='esh_formmail_recipient' value="support@mydomain.com.au"> <input type='hidden' name='esh_formmail_subject' value="Technical Support enquiry"> <input type='hidden' name='esh_formmail_bcc' value=""> <input type='hidden' name='esh_formmail_return_subject' value=""> <input type='hidden' name='esh_formmail_return_msg' value=""> <input type='hidden' name='esh_formmail_mail_and_file' value=""> <input type='hidden' name='esh_formmail_charset' value=""> <table cellspacing='16' cellpadding='0' border='0' > <tr> <td class="form_field" valign='top' align='right'>Your name:</td> <td class="form_text"> <input type="text" name="Name" value="<?php print HtmlSpecialChars( $HTTP_POST_VARS[ "Name" ] ); ?>" class='text_box2'> </td> </tr> <tr> <td class="form_field" valign='top' align='right'>Website address:</td> <td class="form_text"> <input type="text" name="Website_address" value="<?php print HtmlSpecialChars( $HTTP_POST_VARS[ "Website_address" ] ); ?>" class='text_box2'> </td> </tr> <tr> <td class="form_field" valign='top' align='right'>Reply email address: </td> <td class="form_text"> <input type="generic email" name="Reply_addres" value="<?php print HtmlSpecialChars( $HTTP_POST_VARS[ "Reply_addres" ] ); ?>" class='text_box2'> </td> </tr> <tr> <td class="form_field" valign='top' align='right'>Details:</td> <td class="form_text"> <textarea name="Details" rows=6 cols=30 ><?php print HtmlSpecialChars( $HTTP_POST_VARS[ "Details" ] ); ?></textarea> </td> </tr> <tr><td colspan=3 align='center'><input type='submit' value='Submit'> <input type='button' value='Cancel' onclick="location.href='/';"></td></tr> </table> </form> <!-- ======================= End: ======================= --> <?php if( $sErr ) print "<script language='javascript' type='text/javascript'>location.href='#error';</script>";;; else: //!$isHideForm print( "<br><br><hr><center><p class='basic'>Your form has been sent. Thank you.</p><br><br><input type='button' value='Home' onclick=\"location.href='/';\"></center><br><br>" ); endif; //!$isHideForm ?> Quote Link to comment Share on other sites More sharing options...
funkygas Posted November 20, 2008 Author Share Posted November 20, 2008 <? define( "ADMIN_MAIL", "s6software@users.sourceforge.net" ); // bug report email define( "HOST_NAME", getEnv( "HTTP_HOST" ) ); define( "PHP_SELF", getEnv( "SCRIPT_NAME" ) ); define( "ERR_MISSING", "Missing required field : " ); define( "ERR_EMAIL", "Please type in a valid e-mail address : " ); define( "ERR_CREDIT_CARD_NUMBER", "Please check the credit card number : " ); define( "ERR_CREDIT_CARD_EXPIRED", "Please check the credit card expiry date : " ); define( "ERR_SELECT_UPLOAD", "Please select upload file : " ); error_reporting( E_ERROR | E_WARNING | E_PARSE ); ?><?php // --- Array of Form Elements --- $form_mail[] = array( "name" => "Name", "text" => "Name", "type" => "text", "required" => "Required" ) ; $form_mail[] = array( "name" => "Website_address", "text" => "Website address", "type" => "text", "required" => "Required" ) ; $form_mail[] = array( "name" => "Reply_addres", "text" => "Reply address", "type" => "generic email", "required" => "Required" ) ; $form_mail[] = array( "name" => "Details", "text" => "Details", "type" => "textarea", "required" => "Required" ) ; // -- Detech Submit & SendMail -- $isHideForm = false; if( $HTTP_POST_VARS["formmail_submit"] ){ $sErr = checkPass(); if( ! $sErr ){ sendFormMail( $form_mail, "") ; $isHideForm = true; $redirect = ""; if( strlen(trim($redirect)) ): header( "Location:$redirect" ); exit; endif; } } ?> <? // =============================================== function sendFormMail( $form_mail, $sFileName = "" ) { global $HTTP_POST_VARS ; $to = $HTTP_POST_VARS["esh_formmail_recipient"]; // I don't detect spam at this moment. it's to do list. $from = "online.submit@" . HOST_NAME ; $subject = $HTTP_POST_VARS["esh_formmail_subject"]; // first stage keep it simple: $sWhatToDo = $sFileName ? "mailandfile" : "" ; //$HTTP_POST_VARS["esh_formmail_mail_and_file"]; //$sFileName = $HTTP_POST_VARS["esh_formmail_save_record_file"]; $cc = $HTTP_POST_VARS["esh_formmail_cc"]; $bcc = $HTTP_POST_VARS["esh_formmail_bcc"]; $charset = $HTTP_POST_VARS["esh_formmail_charset"]; for( $i = 0; $i < count( $form_mail ); $i ++ ){ $value = trim( $HTTP_POST_VARS[ $form_mail[ $i ][ "name" ] ] ); $content .= $form_mail[ $i ][ "text" ] . " \t : " . $value ."\n"; $line .= remove_newline( $value ) . "\t" ; if( strtolower("Sender's email") == strtolower($form_mail[ $i ][ "type" ]) ) { //print "Type:[" . $form_mail[ $i ][ "type" ] . "] $value <br>\n"; $from = $value ; } }; $content .= "\n\nIP:" . getEnv( "REMOTE_ADDR" ); switch( strtolower($sWhatToDo) ){ case "mailandfile" : mailAttachments( $to , $subject , $content, $from, $charset, $cc , $bcc ) ; if( ! appendToFile( $sFileName, $line ) ) mailReport( $content . "\n\nWrite Form Mail to File Fail." ); break; case "fileonly" : if( ! appendToFile( $sFileName, $line ) ) mailReport( $content . "\n\nWrite Form Mail to File Fail.", $from ); break; default : mailAttachments( $to , $subject , $content, $from, $charset, $cc , $bcc ) ; } mailAutoResponse( $from ) ; } //------------------------------------------------------------------------------------------ function mailAutoResponse( $to ){ global $HTTP_POST_VARS ; $subject = $HTTP_POST_VARS["esh_formmail_return_subject"]; $responseMsg = $HTTP_POST_VARS["esh_formmail_return_msg"]; if( $to && $responseMsg ) mail( $to, $subject, $responseMsg, "From: " . $HTTP_POST_VARS["esh_formmail_recipient"] ); } //------------------------------------------------------------------------------------------ function mailReport( $content = "", $from = "" ){ mail( ADMIN_MAIL, "Error@" . HOST_NAME . PHP_SELF, $content, "From:$from" ); } //------------------------------------------------------------------------------------------ function remove_newline( $str = "" ){ $newliner = "<!--esh_newline-->" ; // replace \r\n with $newliner ; $newtaber = "<!--esh_newtaber-->" ; // replace \t with $newtaber ; $str = ereg_replace( "\t", $newtaber, $str ); $str = ereg_replace( "\r\n", $newliner, $str ); return ereg_replace( "\n", $newliner, $str ); } //------------------------------------------------------------------------------------------ function checkPass() { global $form_mail ; global $HTTP_POST_VARS ; global $HTTP_POST_FILES ; for( $i = 0; $i < count( $form_mail ); $i ++ ){ $type = strtolower( $form_mail[ $i ][ "type" ] ); $value = trim( $HTTP_POST_VARS[ $form_mail[ $i ][ "name" ] ] ); $required = $form_mail[ $i ][ "required" ] ; $text = stripslashes( $form_mail[ $i ][ "text" ] ); // simple check the field has something keyed in. if( !strlen($value) && ( $required == "Required" ) && $type != "attachment" ) return ERR_MISSING . $text ; // verify the special case if( ( strlen($value) || $type == "attachment" ) && $required == "Required" ): switch( $type ){ case strtolower("Sender's Name") : break; case strtolower("Generic email"): case strtolower("Sender's email"): if( ! formIsEMail($value) ) return ERR_EMAIL . $text ; break; case "text" : break; case "textarea" : break; case "checkbox" : case "radio" : break; case "select" : break; case "attachment" : $upload_file = $HTTP_POST_FILES[ $form_mail[ $i ]["name"] ][ "tmp_name" ] ; if( ! is_uploaded_file($upload_file) ) return ERR_SELECT_UPLOAD . $text; break; case strtolower("Date(MM-DD-YYYY)"): break; case strtolower("Date(MM-YYYY)"): break; case strtolower("CreditCard(MM-YYYY)"): if( $value < date("Y-m") ) return ERR_CREDIT_CARD_EXPIRED . $text; break; case strtolower("CreditCard#"): if( !formIsCreditNumber( $value ) ) return ERR_CREDIT_CARD_NUMBER . $text ; break; case strtolower("Time(HH:MM:SS)"): break; case strtolower("Time(HH:MM)"): break; default : //return $sErrRequired . $form_mail[ $i ][ "text" ]; } // switch endif; } // for return "" ; } //------------------------------------------------------------------------------------------ function formSelected( $var, $val ) { echo ( $var == $val ) ? "selected" : ""; } //------------------------------------------------------------------------------------------ function formChecked( $var, $val ) { echo ( $var == $val ) ? "checked" : ""; } //------------------------------------------------------------------------------------------ function formIsEMail( $email ){ return ereg( "^(.+)@(.+)\\.(.+)$", $email ); } //------------------------------------------------------------------------------------------ function selectList( $name, $selectedValue, $start, $end, $prompt = "-Select-", $style = "" ) { $tab = "\t" ; print "<select name=\"$name\" $style>\n" ; print $tab . "<option value=''>$prompt</option>\n" ; $nLen = strlen( "$end" ) ; $prefix_zero = str_repeat( "0", $nLen ); for( $i = $start; $i <= $end ; $i ++ ){ $stri = substr( $prefix_zero . $i, strlen($prefix_zero . $i)-$nLen, $nLen ); $selected = ( $stri == $selectedValue ) ? " selected " : "" ; print $tab . "<option value=\"$stri\" $selected >$stri</option>\n" ; } print "</select>\n\n" ; } //------------------------------------------------------------------------------------------ // something like CreditCard.pm in perl CPAN function formIsCreditNumber( $number ) { $tmp = $number; $number = preg_replace( "/[^0-9]/", "", $tmp ); if ( preg_match( "/[^\d\s]/", $number ) ) return 0; if ( strlen($number) < 13 && 0+$number ) return 0; for ($i = 0; $i < strlen($number) - 1; $i++) { $weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2)); $sum += (($weight < 10) ? $weight : ($weight - 9)); } if ( substr($number, -1) == (10 - $sum % 10) % 10 ) return $number; return $number; } // -------------------------- Begin Mail Attachment Functions ----------------------------------------------------------------- function mailAttachments( $to = "" , $subject = "" , $message = "" , $from = "support@lynx.net" , $charset = "iso-8859-1", $cc = "" , $bcc = "" ){ global $HTTP_POST_FILES ; if( ! strlen( trim( $to ) ) ) return "Missing \"To\" Field." ; $boundary = "====_My_PHP_Form_Generator_" . md5( uniqid( srand( time() ) ) ) . "===="; // setup mail header infomation $headers = "From: $from\r\n"; if ($cc) $headers .= "CC: $cc\r\n"; if ($bcc) $headers .= "BCC: $bcc\r\n"; $plainHeaders = $headers ; // for no attachments header $headers .= "MIME-Version: 1.0\nContent-type: multipart/mixed;\n\tboundary=\"$boundary\"\n"; $txtMsg = "\nThis is a multi-part message in MIME format.\n" . "\n--$boundary\n" . "Content-Type: text/plain;\n\tcharset=\"$charset\"\n\n" . $message . "\n"; //create mulitipart attachments boundary $sError = "" ; $nFound = 0; foreach( $HTTP_POST_FILES as $aFile ){ $sFileName = $aFile[ "tmp_name" ] ; $sFileRealName = $aFile[ "name" ] ; if( is_file( $sFileName ) ): if( $fp = fopen( $sFileName, "rb" ) ) : $sContent = fread( $fp, filesize( $sFileName ) ); $sFName = basename( $sFileRealName ) ; $sMIME = getMIMEType( $sFName ) ; $bPlainText = ( $sMIME == "text/plain" ) ; if( $bPlainText ) : $encoding = "" ; else: $encoding = "Content-Transfer-Encoding: base64\n"; $sContent = chunk_split( base64_encode( $sContent ) ); endif; $sEncodeBody .= "\n--$boundary\n" . "Content-Type: $sMIME;\n" . "\tname=\"$sFName\"\n" . $encoding . "Content-Disposition: attachment;\n" . "\tfilename=\"$sFName\"\n\n" . $sContent . "\n" ; $nFound ++; else: $sError .= "<br>File $sFileName can not open.\n" ; endif; // if( $fp = fopen( $sFileName, "rb" ) ) : else: $sError .= "<br>File $sFileName doesn't exist.\n" ; endif; //if( file_exists( $sFileName ) ): }; // end foreach $sEncodeBody .= "\n\n--$boundary--" ; $sSource = $txtMsg . $sEncodeBody ; $nFound ? mail( $to, $subject, $sSource, $headers ) : mail( $to, $subject, $message, $plainHeaders ); return $sError ; } /* --------------------------------------------------------------------------------------------------- Parameters: $sFileName Return : 1. "" : no extendsion name, or sFileName is empty 2. string: MIME Type name of array aMimeType's definition. ---------------------------------------------------------------------------------------------------*/ function getMIMEType( $sFileName = "" ) { $sFileName = strtolower( trim( $sFileName ) ); if( ! strlen( $sFileName ) ) return ""; $aMimeType = array( "txt" => "text/plain" , "pdf" => "application/pdf" , "zip" => "application/x-compressed" , "html" => "text/html" , "htm" => "text/html" , "avi" => "video/avi" , "mpg" => "video/mpeg " , "wav" => "audio/wav" , "jpg" => "image/jpeg " , "gif" => "image/gif" , "tif" => "image/tiff " , "png" => "image/x-png" , "bmp" => "image/bmp" ); $aFile = split( "\.", basename( $sFileName ) ) ; $nDiminson = count( $aFile ) ; $sExt = $aFile[ $nDiminson - 1 ] ; // get last part: like ".tar.zip", return "zip" return ( $nDiminson > 1 ) ? $aMimeType[ $sExt ] : ""; } // -------------------------- End Mail Attachment Functions ----------------------------------------------------------------- //------------------------------------------------------------------------------------------ function appendToFile( $sFileName = "", $line = "" ){ if( !$sFileName || !$line ) return 0; $hFile = fopen( "$sFileName", "a+w" ); $nBytes = 0; if( $hFile ){ $nBytes = fputs( $hFile , trim($line)."\r\n" ); fclose( $hFile ); }; return $nBytes ; } ?> Quote Link to comment Share on other sites More sharing options...
scottybwoy Posted November 20, 2008 Share Posted November 20, 2008 Underneath $headers = "From: $from\r\n"; add : $headers .= "Reply-To: " . HtmlSpecialChars( $HTTP_POST_VARS[ "Reply_name" ]. " <" . HtmlSpecialChars( $HTTP_POST_VARS[ "Reply_addres" ] ) . ">\r\n"; Change your POST_VARS to the correct $vars_names your using Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.