Foros del Web » Programando para Internet » PHP »

Error en función mail():se envia 2 veces

Estas en el tema de Error en función mail():se envia 2 veces en el foro de PHP en Foros del Web. Hola amigos, tengo un pequeño problema. Tengo un código que lo que hace es recibir la ruta de un archivo por parametro URL y lo ...
  #1 (permalink)  
Antiguo 03/08/2009, 10:51
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Error en función mail():se envia 2 veces

Hola amigos, tengo un pequeño problema.

Tengo un código que lo que hace es recibir la ruta de un archivo por parametro URL y lo envía a una dirección de correo electrónico que tambien recibe.
Ese código está insertado entre un

Código PHP:
<?php
include(cabecera);
?>
y un

Código PHP:
<?php
include(bottom);
?>
Además, tiene código HTML (de estilos principalmente).

El caso es que al ejecutarse el archivo envía dos y hasta tres veces el mismo email.

El caso es que si elimino todo lo que no es ese código de envío, me funciona bien y lo envía una vez.
¿Por que se debe esto?

Aquí adjunto el código de envío:
Código PHP:
<?php
$archivo 
=    $_GET[archivo];
$emailDestino =    $_GET[emailDestino];
$emailUsuario =    $_GET[emailUsuario];
$texto =    $_GET[texto];
$nombre=$_GET[nombre];

if (isset(
$_GET['nombre'])) {



    echo(
$texto);
    
$renombrado=archivo;
    
rename($archivo$renombrado); 
    
$file fopen(archivo"r");

    
$contenido fread($filefilesize($renombrado));
    
$encoded_attach chunk_split(base64_encode($contenido));
    
fclose($file);

    if ((
$nombre!="")||(strlen($nombre)>1)){

        
$asunto$nombre .", le han enviado una tarjeta!";
    }
    else{
        
$asunto="Alguien le ha enviado una tarjeta!";
    }
    
    
$email=$emailDestino;
    
$mensaje=str_replace("<br />","\n",$texto) . "\n\n\n\r===================================================================
texto
==================================================================="
;

    
$cabeceras "From: LogoSea <email>\n";
    
$cabeceras .= "Reply-To: $email\n";
    
$cabeceras .= "MIME-version: 1.0\n";
    
$cabeceras .= "Content-type: multipart/mixed; ";
    
$cabeceras .= "boundary=\"Message-Boundary\"\n";
    
$cabeceras .= "Content-transfer-encoding: 7BIT\n";
    
$cabeceras .= "X-attachments: ".$renombrado;
    
    
$body_top "--Message-Boundary\n";
    
$body_top .= "Content-type: text/plain; charset=US-ASCII\n";
    
$body_top .= "Content-transfer-encoding: 7BIT\n";
    
$body_top .= "Content-description: Mail message body\n\n";

    
$cuerpo $body_top.$mensaje;

    
$nombref=$archivo;
    
$cuerpo .= "\n\n--Message-Boundary\n";
    
$cuerpo .= "Content-type: Binary; name=\"$nombref\"\n";
    
$cuerpo .= "Content-Transfer-Encoding: BASE64\n";
    
$cuerpo .= "Content-disposition: attachment; filename=\"$nombref\"\n\n";
    
$cuerpo .= "$encoded_attach\n";
    
$cuerpo .= "--Message-Boundary--\n";

    
$valorDevuelto mail($email,$asunto,$cuerpo,$cabeceras);  


    if (
$valorDevuelto){
        echo 
" ";
    }
    else{
        echo 
"No :¡ ";
    }

    if (!
unlink($renombrado)){
        echo 
'no se pudo borrar el archivo :'.$renombrado;
    }
    else{
        echo(
"<h2>La imágen ha sido enviada satisfactoriamente. </h2>");
    
    }
    
}    
?>
Es como si se recargara más de una vez la página.
He probado a ponerlo en otro fichero y hacer
Código PHP:
include_once() 
pero nada.
Agradecería alguna explicación
Salu2!
  #2 (permalink)  
Antiguo 03/08/2009, 13:33
(Desactivado)
 
Fecha de Ingreso: junio-2009
Mensajes: 256
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Error en función mail():se envia 2 veces

hola. te recomiendo que uses $_POST en vez de $_GET, porque alli vas a enviar datos de mayor longitud como en la variable texto.

sobre lo que mencionaste en tu tema que te envia 2 veces el correo, debe ser que estas repitiendo la funcion mail() 2 veces.

Código PHP:
Ver original
  1. $archivo =    $_POST['archivo'];
  2. $emailDestino =    $_POST['emailDestino'];
  3. $emailUsuario =    $_POST['emailUsuario'];
  4. $texto =    $_POST['texto'];
  5. $nombre=$_POST['nombre'];
  6.  
  7. if (isset($_POST['nombre'])) {
  8.  
  9.     echo($texto);
  10.     $renombrado=archivo;
  11.     rename($archivo, $renombrado);
  12.     $file = fopen(archivo, "r");
  13.  
  14.     $contenido = fread($file, filesize($renombrado));
  15.     $encoded_attach = chunk_split(base64_encode($contenido));
  16.     fclose($file);
  17.  
  18.     if (($nombre!="")||(strlen($nombre)>1)){
  19.  
  20.         $asunto= $nombre .", le han enviado una tarjeta!";
  21.     }
  22.     else{
  23.         $asunto="Alguien le ha enviado una tarjeta!";
  24.     }
  25.    
  26.     $email=$emailDestino;
  27.     $mensaje=str_replace("<br />","\n",$texto) . "\n\n\n\r===================================================================
  28. texto
  29. ===================================================================";
  30.  
  31.     $cabeceras = "From: LogoSea <$emailUsuario>\n";
  32.     $cabeceras .= "Reply-To: $email\n";
  33.     $cabeceras .= "MIME-version: 1.0\n";
  34.     $cabeceras .= "Content-type: multipart/mixed; ";
  35.     $cabeceras .= "boundary=\"Message-Boundary\"\n";
  36.     $cabeceras .= "Content-transfer-encoding: 7BIT\n";
  37.     $cabeceras .= "X-attachments: ".$renombrado;
  38.    
  39.     $body_top = "--Message-Boundary\n";
  40.     $body_top .= "Content-type: text/plain; charset=US-ASCII\n";
  41.     $body_top .= "Content-transfer-encoding: 7BIT\n";
  42.     $body_top .= "Content-description: Mail message body\n\n";
  43.  
  44.     $cuerpo = $body_top.$mensaje;
  45.  
  46.     $nombref=$archivo;
  47.     $cuerpo .= "\n\n--Message-Boundary\n";
  48.     $cuerpo .= "Content-type: Binary; name=\"$nombref\"\n";
  49.     $cuerpo .= "Content-Transfer-Encoding: BASE64\n";
  50.     $cuerpo .= "Content-disposition: attachment; filename=\"$nombref\"\n\n";
  51.     $cuerpo .= "$encoded_attach\n";
  52.     $cuerpo .= "--Message-Boundary--\n";
  53.  
  54.     $valorDevuelto = mail($email,$asunto,$cuerpo,$cabeceras);  
  55.  
  56.  
  57.     if ($valorDevuelto==""){
  58.         echo " ";
  59.     }
  60.     else{
  61.         echo "No :¡ ";
  62.     }
  63.  
  64.     if (!unlink($renombrado)){
  65.         echo 'no se pudo borrar el archivo :'.$renombrado;
  66.     }
  67.     else{
  68.         echo("<h2>La imágen ha sido enviada satisfactoriamente. </h2>");
  69.    
  70.     }
  71.    
  72. }


puedes colocar tu codigo html del formulario.

Te recomiendo que leas el manual de php de foros del web.

Manual de PHP

saludos.

Última edición por xfer2; 13/12/2009 a las 08:50 Razón: edito.
  #3 (permalink)  
Antiguo 03/08/2009, 16:21
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Error en función mail():se envia 2 veces

Hola, gracias por la recomendación, lo tendré que cambiar por POST mejor :P

Con respecto a lo de mail() ya te digo que no lo envío 2 veces, el código es el que puse aquí arriba. Además como dije antes, si dejo sólo el código que puse (sin los includes ni el resto de html) funciona perfecto y lo envía sólo una vez.

A mi me da la impresión de que el código se está ejecutando dos veces, pero no porque lo tenga en algún bucle ni nada por el estilo, de alguna forma se recarga la página.

A ver si a alguien se le ocurre que puede ocurrir.

Salu2 y gracias
  #4 (permalink)  
Antiguo 03/08/2009, 16:23
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Error en función mail():se envia 2 veces

Estimado Samie , no ha considerado que puede existir el mismo codigo en otro include , de este modo se envia dos veces , probo con un navegador diferente , en muy pocas ocasiones los navegadores poseen plugins instalados que generan estos tipos de problemas.

Saludos.
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 06:15.