Я попробовал пакет почтовых груш. Он успешно отправляет электронное письмо, но дает мне следующую ошибку:
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>"); } }
Может кто-нибудь помочь мне здесь?
Я задал тот же вопрос и нашел реальное решение (вместо маскировки ошибок). Прочтите ответ на вопрос ниже для получения более подробной информации, но в основном просто следуйте приведенным ниже трем изменениям.
Как не вызывать функцию статически в 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)
Спасибо за Амаль за то, что он показал, как это исправить!
Строгие ошибки не мешают работе кода.
Просто установите для параметра сообщения об ошибках значение E_ALL & ~E_STRICT
и они волшебным образом исчезнут.
@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, но последняя и отличная техника.
Начиная с PHP 5, вызов нестатического метода другого класса из нестатического метода другого класса ist verboten под E_STRICT
. Когда был PEAR_Mail
пакет PEAR_Mail
, это был несколько неясный метапрограммный хак в PHP. Таким образом, PEAR_Mail
известен этим.
Метод PEAR::isError()
вероятно, должен был быть статическим методом, но он не является и предполагает контекст экземпляра с большим количеством $this
выбрано. PEAR_Mail
называет его статически в пределах своего контекста экземпляра, поэтому PHP передает значение $this
… Это все виды плохих новостей.
PEAR_Mail::factory()
должен быть определен как static
но не по причинам, известным только оригинальным авторам. Он ВСЕГДА будет генерировать предупреждающее сообщение «нестатический метод» до тех пор, пока код не будет исправлен.
Примечание: PEAR_Mail
не был затронут с 2010 года. Пожалуйста, не используйте его …! Для альтернатив используйте Google, Люк!