联系表格不会在localhost上发送电子邮件

时间:2013-11-27 15:52:45

标签: php forms contact-form

我正在尝试创建一个位于右侧粘滞按钮下的contactform。

似乎我的表格根本没有提交。 我尝试使用action="contactus.php"将代码放在单独的文件上而没有任何结果。 我也在同一页上尝试过,但仍然没有运气。 有人可以给我这个建议吗?

HEAD-section中的PHP:

<?php
define("EMAIL", "my@email.com");

if(isset($_POST['submit'])) {

  include('validate.class.php');

  //assign post data to variables 
  $name = trim(mysql_real_escape_string($_POST['name']));
  $email = trim(mysql_real_escape_string($_POST['email']));
  $message = trim(mysql_real_escape_string($_POST['message']));

  //start validating our form
  $v = new validate();
  $v->validateStr($name, "name", 3, 75);
  $v->validateEmail($email, "email");
  $v->validateStr($message, "message", 5, 1000);  

  if(!$v->hasErrors()) {
        $header = "From: $email\n" . "Reply-To: $email\n";
        $subject = "Contact Form Subject";
        $email_to = EMAIL;

        $emailMessage = "Name: " . $name . "\n";    
        $emailMessage .= "Email: " . $email . "\n\n";
        $emailMessage .= $message;

    //use php's mail function to send the email
        @mail($email_to, $subject, $emailMessage, $header );  

    //grab the current url, append ?sent=yes to it and then redirect to that url
        $url = "http". ((!empty($_SERVER['HTTPS'])) ? "s" : "") . "://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
        header('Location: '.$url."?sent=yes");

    } else {
    //set the number of errors message
    $message_text = $v->errorNumMessage();       

    //store the errors list in a variable
    $errors = $v->displayErrors();

    //get the individual error messages
    $nameErr = $v->getError("name");
    $emailErr = $v->getError("email");
    $messageErr = $v->getError("message");
  }//end error check
}// end isset
?>

HTML中的联系表单:

<div class="slide-out-div">
                <a class="handle">Content</a>
                <h3>Leave your details and we will get back to you asap!</h3>
                <br>
                <form id="contact_form" method="post" action="">
                    Name <br /><input type="text" name="name" required>
                    <br /><br />
                    Email <br /><input type="email" name="email" required>
                    <br /><br />
                    Message <br /><textarea name="message" class="textarea" cols="30" rows="5" required></textarea>
                    <br /><br />
                    <p><input type="submit" name="submit" class="button" value="Submit" /></p>
                </form>
            </div>

validate.class.php文件:

<?php
class validate {

  // ---------------------------------------------------------------------------
  //  paramaters
  // ---------------------------------------------------------------------------

  /**
  * Array to hold the errors
  *
  * @access public
  * @var array
  */
  public $errors = array();

  // ---------------------------------------------------------------------------
  //  validation methods
  // ---------------------------------------------------------------------------

  /**
  * Validates a string
  *
  * @access public
  * @param $postVal - the value of the $_POST request
  * @param $postName - the name of the form element being validated
  * @param $min - minimum string length
  * @param $max - maximum string length
  * @return void
  */
  public function validateStr($postVal, $postName, $min = 5, $max = 500) {
    if(strlen($postVal) < intval($min)) {
      $this->setError($postName, ucfirst($postName)." must be at least {$min} characters long.");
    } else if(strlen($postVal) > intval($max)) {
      $this->setError($postName, ucfirst($postName)." must be less than {$max} characters long.");
    }
  }// end validateStr

  /**
  * Validates an email address
  *
  * @access public
  * @param $emailVal - the value of the $_POST request
  * @param $emailName - the name of the email form element being validated
  * @return void
  */
  public function validateEmail($emailVal, $emailName) {
    if(strlen($emailVal) <= 0) {
      $this->setError($emailName, "Please enter an Email Address");
    } else if (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $emailVal)) {
      $this->setError($emailName, "Please enter a Valid Email Address");
        }
  }// end validateEmail

  // ---------------------------------------------------------------------------
  //  error handling methods
  // ---------------------------------------------------------------------------

  /**
  * sets an error message for a form element
  *
  * @access private
  * @param string $element - name of the form element
  * @param string $message - error message to be displayed
  * @return void
  */
  private function setError($element, $message) {
    $this->errors[$element] = $message;
  }// end logError

  /**
  * returns the error of a single form element
  *
  * @access public
  * @param string $elementName - name of the form element
  * @return string
  */
  public function getError($elementName) {
    if($this->errors[$elementName]) {
      return $this->errors[$elementName];
    } else {
      return false;
    }
  }// end getError

  /**
  * displays the errors as an html un-ordered list
  *
  * @access public
  * @return string: A html list of the forms errors
  */
  public function displayErrors() {
    $errorsList = "<ul class=\"errors\">\n";
    foreach($this->errors as $value) {
      $errorsList .= "<li>". $value . "</li>\n";
    }
    $errorsList .= "</ul>\n";
    return $errorsList;
  }// end displayErrors

  /**
  * returns whether the form has errors
  *
  * @access public
  * @return boolean
  */
  public function hasErrors() {
    if(count($this->errors) > 0) {
      return true;
    } else {
      return false;
    }
  }// end hasErrors

  /**
  * returns a string stating how many errors there were
  *
  * @access public
  * @return void
  */
  public function errorNumMessage() {
    if(count($this->errors) > 1) {
            $message = "There were " . count($this->errors) . " errors sending your message!\n";
        } else {
            $message = "There was an error sending your message!\n";
        }
    return $message;
  }// end hasErrors

}// end class
?>

当我看到FireBug中的POST数据时,我看到了我填写的实际数据。 有可能这不起作用,因为我在LocalHost上吗?

亲切的问候

比约

1 个答案:

答案 0 :(得分:1)

除非您安装mail之类的电子邮件服务器,否则localhost功能将无法在Mercury上运行。

在Windows机器上就是这种情况(正如@Marc B所指出的那样)。