Что плохого в этом PHP-скрипте для отправки почты с помощью Pear Mail? - PullRequest
6 голосов
/ 19 августа 2011

У меня есть этот скрипт:

require_once "Mail.php";

 $from = "Stephen <username@nvrforget.com>";//Google apps domain
 $to = "username@gmail.com";
 $subject = "Hi!";
 $body = "Hi,\n\nHow are you?";

 $host = "mail.nvrforget.com";
 $username = "username@nvrforget.com";
 $password = "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>");
  }

У меня появляется эта ошибка:

Non-static method Mail::factory() should not be called statically 

Есть идеи, как это исправить?Pear Mail установлен на сервере.

Ответы [ 3 ]

11 голосов
/ 19 августа 2011

Нестатический метод Mail :: factory () не должен вызываться статически

Это нефатальное уведомление , пришедшее из PHP, потому что PEAR Mail доисторический и не был обновлен для использования ключевого слова static, введенного пять лет назад в PHP5.

После просмотра документации ваш вызов Mail::factory выглядит полностью правильно и нормально.

Вы не сообщили нам, если вызов send будет успешным или не удачным.Если это удается, но почта никогда не доставляется, проверьте журналы SMTP-сервера.Если это не удается, каково настоящее сообщение об ошибке?Документация Mail::send включает полный список ошибок.

Возможно, вы захотите использовать более современную библиотеку для отправки почты, например Swiftmailer .

0 голосов
/ 02 июля 2013

добавлено @ ко всем вызовам груши / почты.иногда вы можете получить Mail :: factory (), который не должен вызывать статическую ошибку

0 голосов
/ 19 августа 2011

возможно, это связано с отсутствующим амперсандом?

Я заметил в примерах документации, использование фабрики выглядит следующим образом:

// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory('sendmail', $params);

Обратите внимание на присвоение, используя = &

...