PHP: почтовая помощь PEAR - PullRequest
       3

PHP: почтовая помощь PEAR

33 голосов
/ 28 октября 2010

Я пробую почтовую упаковку груши.Он успешно отправляет электронное письмо, но выдает мне следующую ошибку:

Strict Standards: Non-static method Mail::factory() should not be called statically, assuming $this from incompatible context in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\SupportTickets.php on line 356

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Mail\smtp.php on line 365

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 386

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 391

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 398

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 441

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 230

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 445

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Mail\smtp.php on line 376

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 526

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 230

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 529

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 532

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 441

Strict Standards: Non-static method PEAR::isError() should not be called statically,  assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 230

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 445

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 550

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 694

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 230

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 698

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 706


Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 230

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 1017

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 415

Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\PHP\PEAR\Net\SMTP.php on line 230


Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\ClientPortal\classes\SupportTickets.php on line 364
Message successfully sent!

Вот мой код:

function submitTicket(){

     $from = "Billy Jones <billy.jones@networkroi.co.uk>";
     $to = "helpdesk <helpdesk@networkroi.co.uk>";
     $subject = "Email Test!";
     $body = "email test body";

     $host = "***";
     $username = "***";
     $password = "**********";

     $headers = array ('From' => $from,
       'To' => $to,
       'Subject' => $subject);
     $smtp = Mail::factory('smtp',
       array ('host' => $host,
         'auth' => true,
         'username' => $username,
         'password' => $password));

     $mail = $smtp->send($to, $headers, $body);

     if (PEAR::isError($mail)) {
       echo("<p>" . $mail->getMessage() . "</p>");
      } else {
       echo("<p>Message successfully sent!</p>");
      }

}

Может кто-нибудь помочь мне здесь?

Ответы [ 4 ]

31 голосов
/ 27 февраля 2014

Я задал тот же вопрос здесь и нашел реальное решение (вместо маскировки ошибок).Прочитайте ответ на вопрос ниже для получения более подробной информации, но в основном просто следуйте трем правкам ниже.

Как не вызывать функцию статически в php?


Найдите php/pear/Mail.php, перейдите к строке 74 и измените:

function &factory($driver, $params = array())

на

static function &factory($driver, $params = array())

Также в php/pear/Mail.php перейдите к строке 253 и измените:

$addresses = Mail_RFC822::parseAddressList($recipients, 'localhost', false);

до

$Mail_RFC822 = new Mail_RFC822();
$addresses = $Mail_RFC822->parseAddressList($recipients, 'localhost', false);

Найдите php/pear/PEAR.php, перейдите к строке 250 и измените:

function isError($data, $code = null)

на

static function isError($data, $code = null)

Спасибо за Амаль, который показал, как это исправить!

11 голосов
/ 30 ноября 2011

Строгие ошибки не мешают работе кода.

Просто установите параметр сообщения об ошибках на E_ALL & ~E_STRICT, и они волшебным образом исчезнут.

8 голосов
/ 01 июля 2012
@require_once "Mail.php";
$headers = array ('From' => $from,'To' => $to,'Subject' => $subject);
$smtp = @Mail::factory('smtp', array ('host' => $host,'port' => $port,'auth' => true,
        'username' => $UName,'password' => $UPass));

$mail = @$smtp->send($to, $headers, $body);

if (@PEAR::isError($mail))
{   echo("<p>".$mail->getMessage()."</p>"); }
else
{   echo("<p>Message successfully sent!</p>");  }

Посмотрите: я использовал знак @ перед некоторыми переменными и методами. И таким образом вы можете отправлять электронную почту, используя php5. Это старый подход, но должен работать. Хотя вас могут спросить о включении ssl в конфигурации, но это очень просто. Наслаждаться. И, конечно, настороженная, но новейшая и отличная техника использует SwiftMailer .

5 голосов
/ 27 февраля 2014

Начиная с PHP 5, вызов нестатического метода другого класса из нестатического метода другого класса isb verboten в E_STRICT.Когда был создан пакет PEAR_Mail, это был несколько неясный взлом метапрограммирования в PHP.Таким образом, PEAR_Mail печально известен этим.

Метод PEAR::isError(), вероятно, должен быть статическим методом, но это не так, он предполагает контекст экземпляра с большим количеством $this,PEAR_Mail вызывает его статически в своем собственном контексте экземпляра, поэтому PHP выводит значение $this ... Это всевозможные плохие новости.

PEAR_Mail::factory() следует определить как static, но не по причинам, известным только оригинальным авторам. ВСЕГДА будет генерировать это предупреждающее сообщение "нестатический метод", пока код не будет исправлен.

Примечание.Пожалуйста, не используйте это ...!Для альтернативы используйте Google, Люк!

...