2015-12-15 6 views
1

В недавнем проекте мне было предложено связать форму пароля сброса, чтобы автоматически отправлять почту с amazonAWS, используя SMTP-почтовую программу php. Я поместил код вызова (mail -> *) в функцию. Однако после этого я, кажется, получаю сообщение «Неустранимая ошибка: вызов неопределенного метода smtp :: connected() в /var/www/html/PHPMailer-master/class.phpmailer.php в строке 1530«. Кажется, я не могу понять, почему это происходит, и задавался вопросом, видел ли кто-нибудь подобный ответ.Неисправность при связывании phpmailer

Любая помощь будет оценена по достоинству. Код выглядит следующим образом

smtp.php:

require_once('/var/www/html/PHPMailer-master/PHPMailerAutoload.php'); 
    class smtp { 

     var $mail; 

     function __construct() { 
      $this->mail = new PHPMailer; 
      $this->mail->isSMTP(); 
      $this->mail->Host = 'email-smtp.eu-west-1.amazonaws.com'; 
      $this->mail->SMTPAuth = true; 
      $this->mail->Username = '---'; 
      $this->mail->Password = '---'; 
      $this->mail->SMTPSecure = 'tls'; 
      $this->mail->SMTPKeepAlive = true; 
      $this->mail->Port = 587; 
      $this->mail->From = '---.com'; 
      $this->mail->FromName = '---'; 
      $this->mail->WordWrap = 50; 
      $this->mail->isHTML(true); 
      $this->mail->AltBody = 'Please use an HTML-enabled email client to view this message.'; 
     } 

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

     function setBody ($body) { 
      $this->mail->Body = stripslashes($body); 
     } 

     function sendTo ($to) { 
      $this->mail->clearAddresses(); 
      $this->mail->addAddress($to); 

      if (!$this->mail->send()) { 
       return false; 
      } else { 
       return true; 
      } 
     } 

    } 

вызова функции:

public function resetlink(){ 
     if($this->_passed){ 
      $pass = $this->_hash->getrand(); 
      if($this->_db->userValidate($_POST['email'])->getValidate()){ 
       $this->_db->update('---', array(
         'username' => $_POST['email'], 
         'value' => $pass 

       )); 

       $smtp = new smtp(); 
       $smtp->setSubject('sample subject'); 
       $smtp->setBody('sample body'); 
       $smtp->sendTo($_POST['email']); 


      }else{ 
       echo "invalid email"; 
      } 
     } return $this; 
    } 

функция вызывает проблему в class.phpmailer.php:

if ($this->smtp->connected()) { 
      return true; 
     } 

Тестовое письмо было отправлено, когда код был запущен в процедурном стиле, поэтому переменные mail -> * верны. Однако с тех пор, как код был запущен как функция, была обнаружена ошибка. Еще раз, любая помощь будет оценена по достоинству.

Благодаря

+0

Если PHPMailer использует [класс с именем SMTP] (https://github.com/Synchro/PHPMailer/blob/master/class.smtp.php). Вы должны дать своему классу другое имя, чтобы они не могли столкнуться. –

+0

Я не могу поверить, что даже не посмотрел на это. Исправлена ​​проблема. Спасибо – Juakali92

+1

Предстоящий PHPMailer 5.4 добавляет пространства имен, поэтому это уже не будет проблемой. – Synchro

ответ

1

PHPMailer содержит и использует class named SMTP.

Если ваш класс smtp определен до него, возможно, PHPMailer инициирует ваш SMTP-класс вместо его собственного, где функция не определена.

Вы должны дать своему классу другое имя, чтобы они не могли столкнуться.

Смежные вопросы