0

I have this contact form from contact.html that I'm working on and I could not seem to make it functional. Whenever I click the button "Send Message" it will go to blank sendmail.php page. It doesn't show any error(s) instead. Doesn't matter if I filled it or not it will have the same result.

P/s: I'm still a noobie to php and this page is from a template so I'm not really dare to change it too much. (unless you have the solution of course lol)

the contact form:

<form class="contact-form row" method="POST" action="sendmail.php">

                        <div class="usermessagea"></div>
                        <fieldset>

                            <ul>

                                <li class="text-field with-icon span3">

                                    <label for="name-contact-form">
                                        <span class="mainlabel">Name</span>
                                    </label>

                                    <div class="input-prepend"><span class="add-on">
                                        <img src="images/contact-form/user.png" alt="" title="" /></span><input type="text" name="yit_contact[name]" id="name-contact-form" class="with-icon required" value="" />
                                    </div>

                                    <div class="msg-error"></div>

                                    <div class="clear"></div>
                                </li>

                                <li class="text-field with-icon span3">

                                    <label for="email-contact-form">
                                        <span class="mainlabel">Email</span>
                                    </label>

                                    <div class="input-prepend">
                                        <span class="add-on">
                                            <img src="images/contact-form/envelope.png" alt="" title="" />
                                        </span>
                                        <input type="text" name="yit_contact[email]" id="email-contact-form" class="with-icon required email-validate" value="" />
                                    </div>

                                    <div class="msg-error"></div>

                                    <div class="clear"></div>
                                </li>

                                <li class="text-field with-icon span3">

                                    <label for="phone-contact-form">
                                        <span class="mainlabel">Phone</span>
                                    </label>

                                    <div class="input-prepend">
                                        <span class="add-on">
                                            <img src="images/contact-form/phone.png" alt="" title="" />
                                        </span>
                                        <input type="text" name="yit_contact[phone]" id="phone-contact-form" class="with-icon" value="" />
                                    </div>

                                    <div class="msg-error"></div>

                                    <div class="clear"></div>
                                </li>

                                <li class="textarea-field with-icon span9">

                                    <label for="message-contact-form">
                                        <span class="mainlabel">Message</span>
                                    </label>

                                    <div class="input-prepend">
                                        <span class="add-on">
                                            <img src="images/contact-form/pencil.png" alt="" title="" />
                                        </span>
                                        <textarea name="yit_contact[message]" id="message-contact-form" rows="8" cols="30" class="with-icon required"></textarea>
                                    </div>

                                    <div class="msg-error"></div>

                                    <div class="clear"></div>
                                </li>

                                <li class="submit-button span9">
                                    <input type="text" name="yit_bot" id="yit_bot" />
                                    <input type="hidden" name="yit_action" value="sendemail"/>
                                    <input type="hidden" name="yit_referer" value="get-in-touch.html" />
                                    <input type="hidden" name="id_form" value="4" />
                                    <input type="submit" name="yit_sendemail" value="Send Message" class="sendmail alignright" />
                                    <div class="clear"></div>
                                </li>
                            </ul>
                        </fieldset>
                    </form>

sendmail.php:

<?php
/**
 * Define the from email
 */ 

// email
define('TO_EMAIL', 'myemail@email.com.my');
define('FROM_EMAIL', 'email');
define('FROM_NAME', 'name');

/**
 * define the body of the email. You can add some shortcode, with this format: %ID%
 * 
 * ID = the id have you insert on the html markup.
 * 
 * e.g.
 * <input type="text" name="email" />
 *       
 * You can add on BODY, this:
 * email: %email%   
 */ 

define( 'BODY', '%message%<br /><br /><small>email send by %name%, email %email%, tel.: %phone%.</small>' );
define( 'SUBJECT', 'Email from yoursite.com' );

// here the redirect, when the form is submitted
define( 'ERROR_URL', 'contact-error.html' );
define( 'SUCCESS_URL', 'contact-success.html' );
define( 'NOTSENT_URL', 'contact-error.html' );

// the message feedback of ajax request
$msg = array(
    'error' => '<p class="error">Warning! Fill correctly the fields marked in red</p>',
    'success' => '<p class="success">Email sent correctly. Thanks to get in touch us!</p>',
    'not-sent' => '<p class="error">An error has been encountered. Please try again.</p>'
);      

// the field required, by name
$required = array( 'name', 'email', 'message' );

/**
 * Send the email.
 * 
 * SERVER-SIDE: the functions redirect to some URL, in base of result of control and send.
 * The urls must be set in the constants above: ERROR_URL, SUCCESS_URL, NOTSENT_URL
 * 
 * CLIENT-SIDE: in js/contact.js, there is already script for real-time checking of fields
 * and for ajax request of send email, that request in this page (sendmail.php) and echo the feedback message.    
 */   
sendemail();

// NO NEED EDIT
function sendemail() 
{                                
    global $msg, $required;

    if ( isset( $_POST['ajax'] ) )
        $ajax = $_POST['ajax'];
    else
        $ajax = false;

if ( isset( $_POST['yit_action'] ) AND $_POST['yit_action'] == 'sendmail' )  
{

   $body = BODY;

   $post_data = array_map( 'stripslashes', $_POST["yit_contact"] );
       //print_r($post_data);
        //die;

   foreach ( $required as $id_field ) {

            if( $post_data[$id_field] == '' || is_null( $post_data[$id_field] ) ) {
           if ( $ajax )
              end_ajax( $msg['error'] );
           else
          redirect( ERROR_URL );
       }                       
    }

   if( !is_email( $post_data['email'] ) OR $post_data['email'] == '' )
       if ( $ajax )
          end_ajax( $msg['error'] );
       else
          redirect( ERROR_URL );

   foreach( $post_data as $id => $var )
   {
    if( $id == 'message' ) $var = nl2br($var);
$body = str_replace( "%$id%", $var, $body );
}

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= 'From: '.FROM_NAME.' <'.FROM_EMAIL.'>' . "\r\n" . 'Reply-To: ' . $post_data['email'];

   $sendmail = mail( TO_EMAIL, SUBJECT, $body, $headers );


if ( $sendmail ) 
       if ( $ajax )
          end_ajax( $msg['success'] );
       else
          redirect( SUCCESS_URL );
   else
       if ( $ajax )
          end_ajax( $msg['not-sent'] );
       else
          redirect( NOTSENT_URL );
} 
}

function is_email($email) 
{
    if (!preg_match("/[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})/" , $email))
    {
        return false;
    }
    else
    {
        return true;
    }
}

function end_ajax( $msg = '' ) {
    echo $msg;
    die;
}           

function redirect( $redirect = '' ) {
    header( 'Location: ' . $redirect );
    die;
}
?>

Is it has something to do with the php settings? Cos I'm using php ver 5.3.29 and the safe mode is On. I've made some research that it could be the problem but I could not find a way to turn it off. I'm using Plesk 12 and I can't find any options to turn the safe mode off.

Any feedback will much appreciated!

Hey guys thanks for the replies but I finally figured what's the problem. It's the email that is HAS to be domain's email address. I don't know why but I created a testing email testing@domain.com and use it as the $to and it works fine. Thanks for the help!

1 Answers1

0

There is a error in your script,

if ( isset( $_POST['yit_action'] ) AND $_POST['yit_action'] == 'sendmail' )

if (isset($_POST["yit_action"]) AND $_POST["yit_action"] == "sendemail")

You forgot the E ;-)

Erwin Vorenhout
  • 181
  • 1
  • 5
  • 20
  • I changed them. When I send a blank form it will go to contact-error.html page. But when I filled the form it says Internal Server Error (500) ._. – jumpersuit99 Jun 09 '15 at 05:57
  • by the way your answer worked actually it's just that my $to email HAS to be the domain as i mentioned above – jumpersuit99 Sep 17 '15 at 01:35