2015-10-06 108 views
0

我的联系表不愿发送电子邮件。没有给出错误,但没有收到邮件(我没有在本地服务器上工作)。我使用的是面向对象的方式,而不是最简单的方法,它仍然应该工作..我的猜测是,邮件()函数根本没有触发,但我不明白为什么。PHP面向对象的联系表

所有帮助深表感谢!

contact.php

<?php 

include_once('classes/sendmail.php'); 

if(isset($_POST['sendmessage'])){ 
    try { 
     $e = new Email(); 
     $e->Name = $_POST['name']; 
     $e->Email = $_POST['email']; 
     $e->Message = $_POST['message']; 
     $e->Send(); 
    } 

    catch(Exception $e){ 
     $error = $e->getMessage(); 
    } 
} 

if(isset($error)){ 
    echo $error; 
} 
?> 


<!doctype html> 
<body> 


      <form name="contactform" action="" method="post" enctype="text/plain"> 
        <label for="name">Name</label> 
        <input type="text" name="name" id="name" class="name" /> 

        <label for="email">E-mail</label> 
        <input type="text" name="email" id="email" class="email" /> 

        <label for="message">Message</label> 
        <textarea id="message" name="message" ></textarea> 

       <input type="submit" class="send" value="Verzend" name="sendmessage" /> 
      </form> 

类/ sendmail.php

<?php 

class Email{ 

    private $m_sName; 
    private $m_sEmail; 
    private $m_sMessage; 

    public function __set($p_sProperty, $p_vValue){ 
     switch($p_sProperty){ 

      case 'Name': 
       if($p_vValue != '') { 
        $this->m_sName = $p_vValue; 
       } 
       else{ 
        throw new Exception("No name found"); 
       } 
       break; 

      case 'Email': 
      if($p_vValue != '') { 
        $this->m_sEmail = $p_vValue; 
       } 
       else{ 
        throw new Exception("No email adress found"); 
       } 
       break; 

      case 'Message': 
       if($p_vValue != '') { 
        $this->m_sMessage = $p_vValue; 
       } 
       else{ 
        throw new Exception("No message found"); 
       } 
       break; 
     } 
    } 

    public function __get($p_sProperty){ 
     switch($p_sProperty){ 
      case 'Name': 
       return $this->m_sName; 
       break; 

      case 'Email': 
       return $this->m_sEmail; 
       break; 

      case 'Message': 
       return $this->m_sMessage; 
       break; 
     } 
    } 

    public function Send(){ 

     $email_to = "<my Email>"; 
     $email_subject = "<my subject>"; 

     $email_message = "Name: ".$this->m_sName."\n"; 
     $email_message .= "Email: ".$this->m_sEmail."\n"; 
     $email_message .= "Message: ".$this->m_sMessage."\n"; 

     $headers = 'From: '.$this->m_sEmail."\r\n". 
     'Reply-To: '.$this->m_sEmail."\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 

     mail($email_to, $email_subject, $email_message, $headers); 

    } 

} 

?> 

编辑:有很多问题已经被问及接触的形式,但没有一个是使用OOP似乎像我一样有同样的问题。

+0

当你在send()函数内部回显时会发生什么? – Exception

+0

回声究竟是什么?在页面顶部弹出任何内容。 – lvRoy

回答

1

你的问题不在PHP类中。它不会抛出错误,因为它没有收到任何$_POST数据。您需要从<form>中删除enctype="text/plan"

应该是这样做的时候:

<form name="contactform" action="" method="post"> 
+0

这样做,非常感谢! – lvRoy

+0

你打赌 - 高兴地帮助 – visevo

0

你已经测试你的表格前,设置SMTP/sendmail的?

您可以使用图书馆的PHPMailer

例子:

function send_email($subject, $from_mail, $message) { 

      $mail = new PHPMailer(); 
      $mail->IsSMTP(); // send via SMTP 
      $mail->Host  = setting_db('SMTPHOST'); // SMTP servers 
      $mail->SMTPAuth = true;     // turn on 
      $mail->Username = setting_db('SMTPUSER'); // SMTP username 
      $mail->Password = setting_db('SMTPPASSWORD'); // SMTP password 
      $mail->From  = setting_db('SMTPUSER'); // // SMTP username from 
      $mail->FromName = "Your Name"; 
      $mail->AddAddress($from_mail); // 
      $mail->Subject = $subject; 
      $mail->Body  = $message; 
      if ($mail->send()) { 
       return "OK!"; 
      } else { 
       return "No!". $mail->ErrorInfo; 
      } 

}

和更新文件contact.php

send_email($_POST["subject"], $_POST["email"], $_POST["message"]); 

更换

$e = new Email(); 
$e->Name = $_POST['name']; 
$e->Email = $_POST['email']; 
$e->Message = $_POST['message']; 
$e->Send(); 
+0

这并不完全回答他的问题。 – visevo