Foros del Web » Programando para Internet » PHP »

error con send() utilizando phpmailer

Estas en el tema de error con send() utilizando phpmailer en el foro de PHP en Foros del Web. Estoy usando la clase phpmailer para enviar correos. Tengo un bucle que recorre una tabla que tiene emails. Por cada interaccion manda un correo con ...
  #1 (permalink)  
Antiguo 16/02/2006, 05:48
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
error con send() utilizando phpmailer

Estoy usando la clase phpmailer para enviar correos.

Tengo un bucle que recorre una tabla que tiene emails. Por cada interaccion manda un correo con send()

Manda cierto numero de correos correctamente, pero de repente empieza a no enviar, con este error "from_failed"

No creo que tenga mucho sentido porque el from es igual para todos, y es una cuenta que existe.

Ayuda por favor!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #2 (permalink)  
Antiguo 16/02/2006, 07:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. ese mensaje de error quien lo emite? .. Tu código? .. el de PHP Mailer? (es una respuesta de tu servidor SMTP o MTA en general? ..)

Indica el código que usas y donde sale ese mensaje para hacernos una idea de quien lo emite. (y si el mensaje completo es más largo ... indicalo todo en su contexto).

Un saludo,
  #3 (permalink)  
Antiguo 17/02/2006, 02:40
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Es un error del phpmailer, del metodo send() mas concretamente, que permite mostrar cual ha sido el fallo del envio del correo. Falla el from...

El trozo de codigo es este:

Código PHP:
<?
    
        
//Anteriormente recogo todo los datos del boletin:
        //$correo tiene el from de ese boletin
        //$descripcion tiene la descripcion del boletin
       //$titulo tiene el subject
       //$ruta tiene la ruta que debe seguir para añadir las imagenes correspondientes
      
    
    
require("../include/class.phpmailer.php");
        
    
$mail = new PHPMailer();

      
        
//Especifico ciertos datos del correo
    
$mail->From     $correo;
    
$mail->FromName "Boletin ".$descripcion;
    
$mail->Subject  $titulo;
    
$mail->Host     "localhost";
    
$mail->Mailer   "smtp";
    
        
//Añado imagenes
    
$mail->AddEmbeddedImage($ruta."imgs/cabecera.gif""cabecera""""base64""image/gif");
    
$mail->AddEmbeddedImage($ruta."imgs/sombra.gif""sombra""""base64""image/gif");
    


    
$enviadas 0;
    
$noenviadas=0;

    
        
//Selecciona a los suscriptores de ese boletin que esten activos
        
$q="SELECT * FROM suscriptor_boletin WHERE activo=1 AND id_boletin=$id_tipo";
        
$rs=mysql_query($q);
        
$total mysql_num_rows($rs);
        
        
        while(
$rw=mysql_fetch_array($rs)){
            
//Busca el email del suscriptor
            
$query sprintf("SELECT email FROM suscriptores WHERE id=%d",$rw['id_suscriptor']);
            
$result mysql_query($query);
            
$row mysql_fetch_array($result);                                           

                        
//Monto el cuerpo del boletin con una funcion propia
            
$body boletin_mailing();
            
$mail->Body    $body;
            
$mail->AltBody $body;
            
$mail->ClearAddresses();
                        
//Añado el mail para enviar
            
$mail->AddAddress($row[0]);
            
            
//Mando el correo, y muestro si se ha enviado o no, con su error
            
$cont=0;
            if(
$mail->Send()){
                
$enviadas++;
                echo 
"<br>enviado: ".$row[0];
            }else{
                
$noenviadas++;
                echo 
"<br>NO enviado: ".$row[0];
                echo 
"         Motivo: ";
                echo 
$mail->ErrorInfo;
                
            }
            
        }
        echo 
"<br><br>Enviadas: ".$enviadas;
        echo 
"<br>Total: ".$total;

    exit;
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #4 (permalink)  
Antiguo 17/02/2006, 05:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Entonces el error te lo está entregando tu servidor SMTP (o MTA que uses en general) .. Es decir .. podría ser un error de "logica" (alguna variable que no toma su valor . .o no es del tipo/formato requerido ..) o directametne es un error en la entrega del e-mail (reportado por el servidor SMTP .. tal vez derivado por lo anterior).

Ahora .. seguro que sólo dice el error "from_failed" ?

Donde le das valor a:
$mail->From = $correo;

Es decir .. estás seguro que $correo tiene una dirección de e-mail válida y está llegando a ese punto?.

Un saludo,
  #5 (permalink)  
Antiguo 17/02/2006, 06:05
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
El error no se donde esta... ese es el problema, jeje. El caso es que lo de "from_failed" sale de mostrar la variable $ErrorInfo. Segun la documentacion de phpmailer la variable $ErrorInfo sale de aqui:

Descripcion de lo que hace el metodo send():
Creates message and assigns Mailer. If the message is not sent successfully then it returns false. Use the ErrorInfo variable to view description of the error.

Es decir: Si el mensaje no se envia, devuelve false, y en la variable ErroInfo se encuentra la descripcion del error.


La variable $correo estoy absolutamente seguro de que esta rellena, y que es una direccion valida que se esta utilizando de manera normal.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #6 (permalink)  
Antiguo 17/02/2006, 08:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
La variable $correo estoy absolutamente seguro de que esta rellena, y que es una direccion valida que se esta utilizando de manera normal.
No está de más hacer un "echo $correo;" en esa parte del código .. Así como pusistes el codigo fuera de contexto (o no? .. es todo lo que hay en ese script) yo no sé de donde sale "$correo" ... llega por el URL desde otro link o formulario en GET/POST? .. Si es así .. usa los arrays $_GET, $_POST según corresponda para acceder a tus variables. Por eso una confirmación como te menciono te asegurará si realmente estás tomando ese valor correctamente en ese script.

El comentario que te hacía sobre el mensaje de error "form_failed" me refiero a eso mismo .. a que es un mensaje "directo" que PHP Mailer simplemente "lee" del "socket" que abrió para enviar el e-mail (creo que así lo hace .. pero lo vería mejor si pones el mensaje de error textual completo o lo confirmas).

Un saludo,

Un saludo,
  #7 (permalink)  
Antiguo 22/02/2006, 10:43
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
Es que estaba tan seguro porque ya hice un "echo $correo;", jeje

El mensaje de error que contiene la variable ErrorInfo, mostrada tal que asi: "echo $mail->ErrorInfo;", siendo $mail el

objeto PHPMailer, es exactamente:


Language string failed to load: from_failed [email protected]


El error de "Language string failed to load" es porque no encuentra la traducccion al español de ese error: El from ha

fallado...



Despues de diseccionar todo el codigo de PHPMailer , he sacado en claro esto:

Falla en el momento de interactuar con el servidor (porque el socket lo abre, que lo he comprobado), mas concretamente en

el instante en que escribe esta linea:

Código PHP:
fputs($this->smtp_conn,"MAIL FROM:<" $from ">\r\n"); 
(Codigo de la clase smtp, necesaria para phpmailer)

Es decir, $this->smtp_conn es la variable donde esta el "recurso", "manejador", "apuntador", o como lo que querais

llamar, en la que se encuentra el socket. (Repito que el socket esta abierto, seguro)

O sea que escribe en el socket "MAIL FROM:<[email protected]>\r\n" (y lo escribe, porque devuelve 38, que es el numero de

bytes que ha escrito)

Pero no obtiene ninguna respuesta, ni de confirmacion ni de error, ni de nada, y por lo tanto surge el error.

Porque puede pasar esto? Sabiendo que ya se han enviado cierto numero de emails con este mismo from, ya que se encuentra

dentro de un bucle, sin ningun fallo.

Muchas Gracias!
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #8 (permalink)  
Antiguo 22/02/2006, 11:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La traducción que dá y descripción de ese error es:

$PHPMAILER_LANG["from_failed"] = 'La(s) siguiente(s) direcciones de remitente fallaron: ';

(ajustate el "lenguaje" en PHP Mailer para verlos claro: setlanguaje() creo que es el método ... ).

No sé por qué falla despues de N envios .. realmente debería si es problema de eso, fallar a la primera.

En los foros oficiales de PHP Mailer no aparecen muchos comentarios de interes al respecto.

Podría ser de todas formas una limitación del servidor SMTP que usas. Podrías probar otro servidor SMTP? .. (no sé si usas un servidor SMTP própio? .. o el de algún ISP tuyo?)

Un saludo,
  #9 (permalink)  
Antiguo 22/02/2006, 12:15
 
Fecha de Ingreso: febrero-2006
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 0
Esta misma situacion me sucedio alguna vez y el problema era que el cuerpo del correo que estaba enviando no tenia ningun "enter" y en lineas de mas de 300 caracteres el servidor "relay" me generaba este error, tuve que cambiar el cuerpo del correo para se realizara un salto de linea cada 100 caracteres.

No esta de mas probar.........
  #10 (permalink)  
Antiguo 23/02/2006, 03:09
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
dime eiji2l, tambien tenias un bucle que te enviaba a muchas direcciones distintas? y sobre todo, te enviaba al principio unos cuantos correos bien (entre 10 y 20 mas o menos) y luego daba fallos? o te daba fallo desde el principio?

Otra cosa, como puedo hacer en una cadena que por cada x caracteres me introduzca otra cadena en medio?

Gracias
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #11 (permalink)  
Antiguo 23/02/2006, 05:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Otra cosa, como puedo hacer en una cadena que por cada x caracteres me introduzca otra cadena en medio?
puedes usar la función:
wordwrap()
http://www.php.net/wordwrap

Un saludo,
  #12 (permalink)  
Antiguo 17/03/2006, 12:19
 
Fecha de Ingreso: febrero-2006
Mensajes: 4
Antigüedad: 11 años, 9 meses
Puntos: 0
Saludos, tengo un bucle que me envia correos a diferentes direcciones y los correos que no salian era por esta causa sin importar que fuese el primero o el ultimo correo que sacaba.........
  #13 (permalink)  
Antiguo 17/03/2006, 12:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por eiji2l
Saludos, tengo un bucle que me envia correos a diferentes direcciones y los correos que no salian era por esta causa sin importar que fuese el primero o el ultimo correo que sacaba.........
No entendí bien el problema que tenías o la falla en concreto.

Podrías detallarlo?

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 00:52.