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