2011-08-18 16 views
6

tengo este script:¿Qué hay de malo en este script PHP para enviar correo usando Pear Mail?

require_once "Mail.php"; 

$from = "Stephen <[email protected]>";//Google apps domain 
$to = "[email protected]"; 
$subject = "Hi!"; 
$body = "Hi,\n\nHow are you?"; 

$host = "mail.nvrforget.com"; 
$username = "[email protected]"; 
$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>"); 
    } 

estoy subiendo con este error:

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

alguna idea de cómo solucionar este problema? Pear Mail está instalado en el servidor.

+0

Se ve correcto. ¿Estás seguro de que tu biblioteca Pear Mail está siendo incluida correctamente? – labue

Respuesta

11

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

Ésta es una no fatal aviso procedentes de PHP porque PEAR Mail es prehistoric y no se ha actualizado para utilizar la palabra clave static introducida hace cinco años en PHP5.

Después de reviewing the documentation, su llamada a Mail::factoryparece completamente correcta y normal.

No nos avisó si la llamada al send tuvo éxito o no. Si está teniendo éxito, pero el correo nunca se está entregando, verifique los registros del servidor SMTP. Si está fallando, ¿cuál es el mensaje de error real? La documentación Mail::send incluye una lista completa de errores.

Es posible que desee considerar el uso de una biblioteca de envío de correo más moderna, como Swiftmailer.

+0

Ah ... muy interesante. El envío no parece tener éxito. Voy a probar swiftmailer, porque definitivamente preferiría tener una biblioteca más moderna. Gracias. – chromedude

-2

¿quizás tiene que ver con la falta de un símbolo comercial?

Me he dado cuenta en los ejemplos de documentación, el uso de la fábrica se parece a esto:

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

Nota del assigment usando = &

+1

-1, ya no es necesario pasar objetos por referencia en PHP5. Esa sintaxis es solo para PHP4. – Charles

-2

antes de an @ a todas las llamadas pear/mail. en algún momento puede terminar con Mail :: factory() no se debe llamar como error estático

Cuestiones relacionadas