Я использую грушу для отправки почты в PHP. Я следовал примеру, который находится здесь ( http://pear.php.net/manual/en/package.mail.mail.send.php ). Тем не менее, я получаю это сообщение об ошибке.
Строгие стандарты: нестатический метод Mail :: factory () не следует вызывать статически в C: \ xampp \ htdocs \ functions.php в строке 43
- API Gmail: Недостаточное разрешение
- Как проверить, существует ли почтовый адрес без отправки электронной почты?
- Как настроить эти заголовки электронной почты с помощью API Mailgun
- WooCommerce Новый электронный адрес электронной почты заказа для некоторых продуктов
- Чтение почты в php с помощью imap
- почтовых клиентов, поддерживающих формат электронной почты «автоматизированный ярлык» (например: name+label@gmail.com)
Поэтому я пытался получить сообщение «Строгие стандарты», чтобы не появляться.
Это мой код:
$smtpinfo["host"] = "********"; $smtpinfo["port"] = "587"; $smtpinfo["auth"] = true; $smtpinfo["username"] = $mail_username; $smtpinfo["password"] = $mail_password; ## This line below is causing the problem ## $mail =& Mail::factory("smtp", $smtpinfo); // <-- Line 43
Я прочитал много вопросов и ответов о переполнении стека, которые говорят, что просто добавьте @
в начало $mail
. И это правда, это заставляет ошибку исчезать, но я чувствую, что это просто скрывает ошибку и на самом деле не решает проблему.
@$mail =& Mail::factory("smtp", $smtpinfo);
Как не вызывать метод выше, как статически?
Даже документация на этой странице ( http://pear.php.net/manual/en/package.mail.mail.send.php ) говорит, что This function cannot be called statically.
… но пример, который они дали, так же, как я называю метод ?!
Пожалуйста, не отвечайте, просто добавьте @
впереди, чтобы удалить строгий стандарт или E_ALL & ~E_STRICT
… это не решение!
Если вы посмотрите на класс PEAR Mail, вы увидите, что существует несколько случаев, когда он вызывает методы статически, когда методы не объявлены как статические.
Измените строку 74 Mail.php
с:
function &factory($driver, $params = array())
чтобы:
static function &factory($driver, $params = array())
Другой менее желательной альтернативой было бы изменение конфигурации php.ini
чтобы игнорировать предупреждения E_STRICT
, но я считаю, что исправление причины сообщения об ошибке лучше, чем скрытие.
В вашем коде и примере на странице документации груши нет ничего плохого. Это non-fatal message
которое дает PHP. Основная причина этого сообщения: pear Mail
не обновляется для ключевого слова static
. PHP вводил static
использование ключевых слов в 2006 или 2007 году, не мог вспомнить точную дату. PHP дает ошибку о статическом вызове из-за старой базы кода груши Mail
.
без необходимости изменять исходные классы, просто создайте собственный класс с помощью метода:
class Mailer { function sendConfirmationEmail() { $ret = false; $smtp = new Mail(); $smtp->factory('smtp', $emailServer); $mail = $smtp->send($recipient, $headers, $body); if (@PEAR::isError($mail)) { sprintf("in sendConfirmationEmail error: %s", $mail->getMessage()); } else { sprintf("in sendConfirmationEmail E-Mail successfully sent to: %s", $recipient); $ret = true; } return $ret; }
и назовите его в своем статическом коде:
$m = new Mailer(); $m->sendConfirmationEmail();
Это сработало для меня. Надеюсь, поможет. Pietro.