2010-12-14 100 views
0

我有这个工作,我不知道我做了什么,使它停止。这里是我的电子邮件类:电子邮件类PHP停止工作

<?php 

    // File Details: Base mail class 

class Email { 

    private $to = '[email protected]'; 
    public $email = NULL; 
    public $phone = NULL; 
    public $subject = NULL; 
    public $body = NULL; 
    //private $magic_quotes_active; 
// private $real_escape_string_exists; 

    //function __construct() { 
     //$this->magic_quotes_active = get_magic_quotes_gpc(); 
     //$this->real_escape_string_exists = function_exists("mysql_real_escape_string"); 
    //} 

    public function send() { 
     $this->addHeader('From: [email protected]' . "\r\n" . 
         'Reply-To: [email protected]' . "\r\n" . 
         'X-Mailer: PHP/' . phpversion() . "\r\n"); 
     $this->addHeader("MIME-Version: 1.0\r\n"); 
     $this->addHeader("Content-Type: text/html; charset=ISO-8859-1\r\n"); 
     $success = mail($this->to, $this->subject, $this->body, $this->headers); 
     if ($success) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    private function addHeader($header) { 
     $this->headers .= $header; 
    } 

    public function setName($first, $last) { 
     $this->first = $first; 
     $this->last = $last; 
    } 

    public function setSubject($subject) { 
     $this->subject = $subject; 
    } 

    public function setPhone($phone) { 
     $this->phone = $phone; 
    } 

    public function setEmail($email) { 
     $this->email = $email; 
    } 


    public function setBody($body) { 
     //$this->body = $this->escape_value($body); 
     $this->body = $body; 
    } 

    //public function escape_value($value) { 
//  if ($this->real_escape_string_exists) { // PHP 4.3.0 or higher 
//   // undo any magic quote effects so mysql_real_escape_string can do the work 
//   if ($this->magic_quotes_active) { 
//    $value = stripslashes($value); 
//   } 
//   $value = mysql_real_escape_string($value); 
//   
//  } else { // before PHP v.4.3.0 
//   //if magic quotes aren't already on then add slashes manually 
//   if (!$magic_quotes_active) { 
//    $value = addslashes($value); 
//   } 
//  } 
//  
//  return $test; 
// } 

} 

$mail = new Email();  
$mail->setSubject($_POST['subject']);  
$mail->setBody($_POST['body']); 
$mail->setName($_POST['first'], $_POST['last']); 
$mail->setEmail($_POST['email']); 
$mail->setPhone($_POST['phone']); 
$mail->send(); 


?> 

在这里,我称之为:

$mail = new Email(); 
     $mail->setName($_POST['first'], $_POST['last']); 
     $mail->setSubject($_POST['subject']); 
     $mail->setBody($_POST['body']); 
     $mail->setEmail($_POST['email']); 
     $mail->setPhone($_POST['phone']); 
     $mail->send(); 

我必须在脚本的顶部,一旦需要的类和我没有得到任何时候PHP错误我运行它。当我回显$mail->send();它回来是真实的。所以有人可以帮助我理解这里发生的事情(或者为什么事情不再发生,更确切地说)。电子邮件永远不会来。

感谢今天大家的帮助,顺便说一句。

回答

1

像与核心邮件()(其中类是基于)函数中的所有问题,也有很多变数,进入什么可能会导致邮件无法递送。您的主机可能会限制您可以排队的邮件数量,特别是当php邮寄出去时(这取决于您的服务器配置方式,意味着它可以将其作为用户调配:没有人)

此功能非常通常被滥用,许多共享主机会对其使用施加限制。您在SO碰上定期

最好的建议是使用像PHPMailer一个成熟的,完整的邮寄级解决方案。这将允许您设置标题并执行许多准备步骤,以确保更好的传送能力。

的PHPMailer的语法非常相似,滚你自己的,你在这里做,所以你应该没有问题,适应它。它还允许您在更简单的系统中发送附件和HTML格式的电子邮件。

+0

的PHPMailer也允许登录通过SMTP,这使得它让你的主机上的实际的,有效的电子邮件帐户被分派邮件。如果许多配置较好的邮件服务器在源主机中不代表有效的用户,它们将拒绝邮件中包含的邮​​件和回复邮件头。例如,Gmail在确定垃圾邮件时也会执行此操作并检查有效的SPF记录。 – DeaconDesperado 2010-12-14 23:08:44

0

你可以添加一些有关的信息,例如如果,你最近重新编译环境中的东西吗?

如果是这样,我记得包含在PHP 5.x中的电子邮件扩展需要unxi电子邮件二进制文件在安装过程中可访问。

关于错误,这可能通过你的php.ini的配置来解释。这并不意味着没有警告。

希望我有一些帮助。

干杯。

A.