2010-02-17 12 views
15

Estoy tratando de usar PEAR Mail para enviar usando un servidor smtp externo. Parece colgar por un tiempo, luego el guión termina. Emite todas mis declaraciones de "eco" hasta la posterior al envío. Nada sale más allá del eco que dice "antes de enviar". ¿Alguien puede decirme qué podría estar mal aquí? (valores ficticios sustituidos por valores smtp). El correo no se envía. ¡Gracias por ayudar!Problema con PHP PEAR Mail

echo "start"; 
$n = $_POST['txtName']; 
$e = $_POST['txtEmail']; 
$t = 'Kenny <[email protected]>'; 
$f = 'Kenny <[email protected]>'; 
$s = 'CPA TEST'; 
$b = "name: $n email: $e"; 

include("mail.php"); 
echo "after include"; 
/* mail setup recipients, subject etc */ 
$recipients = $t; 
$headers["From"] = $f; 
$headers["To"] = $t; 
$headers["Subject"] = $s; 
$mailmsg = $b; 
/* SMTP server name, port, user/passwd */ 
$smtpinfo["host"] = "my_smtp_host"; 
$smtpinfo["port"] = "25"; 
$smtpinfo["auth"] = true; 
$smtpinfo["username"] = "my_email"; 
$smtpinfo["password"] = "my_password"; 
echo "before object"; 
/* Create the mail object using the Mail::factory method */ 
$mail_object =& Mail::factory("smtp", $smtpinfo); 
echo "before send"; 
/* Ok send mail */ 
$send = $mail_object->send($recipients, $headers, $mailmsg); 
echo "after send"; 
if (PEAR::isError($send)) { print($send->getMessage());}else{print "end";} 
echo "done"; 

Respuesta

6

Pruebe lo siguiente para asegurarse de que su correo está funcionando:

<?php 
require_once "Mail.php"; 

$from = "Sandra Sender <[email protected]>"; 
$to = "Ramona Recipient <[email protected]>"; 
$subject = "Hi!"; 
$body = "Hi,\n\nHow are you?"; 

$host = "mail.example.com"; 
$username = "smtp_username"; 
$password = "smtp_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>"); 
} 
?> 

Si esto no funciona, entonces tendrá que revisar su configuración de PHP.

Consulte http://php.net/manual/en/function.mail.php para obtener más información.

+0

Gracias por la respuesta Todd. – Kenny

+0

Hola. Probé tu script y tiene el mismo efecto que el código "real". Se cuelga, sin advertencias, sin errores. mi configuración de php contiene error_reporting = E_ALL | E_STRICT y display_errors = On. ¿Cualquier otra sugerencia? –

+1

Siga los consejos de Rap y Jayme Dunlap ejecutándolo en la línea de comando para ver el error. –

2

La secuencia de comandos de Todd es excelente, pero no resolverá su problema, ya que su navegador agota el tiempo de espera antes de que SMTP lo haga. Es por eso que solo ve la mitad de su página y no ve ningún mensaje de error que pueda usar para depurar su configuración de SMTP.

La solución es ejecutar el script PHP directamente. Sin tiempo de espera

Si no puede hacer eso porque su ISP no le da acceso al shell, cree un trabajo cron para ejecutar cada minuto. Cron le enviará por correo electrónico la salida que tendrá detalles completos de depuración.

15

Me encontré con el mismo problema donde se colgó en el comando de envío. Mi primer paso fue ejecutar desde la línea de comando para ver el mensaje de error completo (como se sugirió Rap más arriba).

php mymailsample.php 

Se escupir el siguiente

Warning: include_once(Net/SMTP.php): failed to open stream: No such file or directory in mail/Mail/smtp.php on line 348 
PHP Warning: include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/lib/php') in mail/Mail/smtp.php on line 348 
PHP Fatal error: Class 'Net_SMTP' not found inmail/Mail/smtp.php on line 349 

he descargado el siguiente, y ponerlos en/Net

http://pear.php.net/package/Net_SMTP/download
http://pear.php.net/package/Net_Socket/download

tuve que ajustar los permisos del Bibliotecas SMTP y Socket para que puedan ser leídas por Apache.

¡Y listo, funcionó!

+10

O simplemente ejecute 'sudo pear install Net_SMTP' si puede ejecutar pear desde la línea de comandos :) –

+0

@JustinJenkins You rock man! – mboy

1

En realidad, he encontrado el mismo problema. Se produjo un error en la secuencia de comandos de producción y tuve problemas para solucionarlo. Principalmente porque había tanto código que evitaba que aparecieran errores. Finalmente, utilicé el código de Kenny Ray, lo modifiqué para que funcionase en mi entorno y realicé una prueba. Resultó que Net_Socket desapareció de alguna manera. Lo desinstalé y volví a instalar, y todo comenzó a funcionar nuevamente. Espero que esto te ayude.

47

Si alguien se ejecuta en Linux y se encuentra con el mismo problema que Jayme. Aquí hay otra solución simple para instalar las clases "Net /" faltantes. Estas clases faltantes provocan que la secuencia de comandos se interrumpa.

sudo pear install Net_SMTP

+1

Esto es lo que me solucionó. – smoothgrips

+0

Esta fue mi solución. Gracias;) – daniherculano

+0

Esto funcionó para mí también! Gracias – Sahil

5

La reinstalación del canal: el trabajo Does'nt //pear.php.net/Mail-1.2.0 para mí (Ubuntu 12..04)

Basta con retirar el caracter "&" antes de nuevas

sudo vi /usr/share/php/Mail/smtp.php 
    349   /*$this->_smtp = &new Net_SMTP($this->host, */ 
    350   $this->_smtp = new Net_SMTP($this->host,