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?
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!
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.
@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 .
À 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!