web-dev-qa-db-fra.com

PHP: PEAR aide mail

J'essaie le paquet mail pear. Il envoie avec succès un e-mail mais donne-moi l'erreur suivante:

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!

Voici mon code:

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>");
      }

}

Quelqu'un peut-il m'aider ici?

33
iamjonesy

J'ai posé la même question ici et j'ai trouvé une vraie solution (au lieu de masquer les erreurs). Lisez la réponse à la question ci-dessous pour plus de détails, mais suivez simplement les trois modifications ci-dessous.

Comment ne pas appeler statiquement une fonction en php?


Trouver php/pear/Mail.php, passez à la ligne 74 et changez:

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

à

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

Aussi dans php/pear/Mail.php allez à la ligne 253 et changez:

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

à

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

Trouver php/pear/PEAR.php, passez à la ligne 250 et modifiez:

function isError($data, $code = null)

à

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

Merci pour Amal d'avoir montré comment résoudre ce problème!

31
Arian Faurtosh

Les erreurs strictes n'empêchent pas le code de fonctionner.

Définissez simplement le paramètre de rapport d'erreurs sur E_ALL & ~E_STRICT et ils disparaîtront comme par magie.

11
cweiske
@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>");  }

Regardez: j'ai utilisé le @ signe avant certaines variables et méthodes. Et de cette façon, vous pouvez envoyer des e-mails en utilisant php5. C'est une vieille approche, mais ça devrait marcher. Bien que l'on puisse vous demander d'activer SSL dans la configuration, c'est un jeu d'enfant. Prendre plaisir. Et, bien sûr, la technique la plus récente et la plus efficace consiste à utiliser SwiftMailer .

8
Abdul Jabbar

À partir de PHP 5, appel d'une méthode non statique d'une autre classe à partir de la méthode non statique de autre class ist verboten under E_STRICT. Lorsque le package PEAR_Mail a été créé, il s'agissait d'un hack de méta-programmation quelque peu obscur en PHP. Ainsi PEAR_Mail est connu pour cela.

La méthode PEAR::isError() probablement aurait dû être une méthode statique, mais ce n'est pas le cas et suppose un contexte d'instance avec beaucoup de $this jeté autour. PEAR_Mail L'appelle statiquement dans son propre contexte d'instance, donc PHP infère la valeur de $this ... Ce qui est toutes sortes de mauvaises nouvelles.

PEAR_Mail::factory() devrait être défini comme static mais ne l'est pas pour des raisons connues seulement des auteurs originaux. Il TOUJOURS générera ce message d'avertissement "méthode non statique" jusqu'à ce que le code soit corrigé.

Remarque:PEAR_Mail N'a pas été touché depuis 2010. Veuillez ne pas l'utiliser ...! Pour des alternatives, utilisez Google, Luke!

5
AL the X