Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/09/2006, 04:16
shiddarta
 
Fecha de Ingreso: agosto-2006
Mensajes: 18
Antigüedad: 17 años, 8 meses
Puntos: 0
Formulario con envio de mail

Hola de nuevo, tengo problemillas con un formulario que adjunta fichero y lo manda por ma¡l. No sé por qué pero si no adjunto ficheros el mensaje se envía correctamente con la hora y la IP del remitente, pero si adjunto un fichero sólo llega el fichero pero nada de texto, ni el mensaje esctito ni dada

Me podéis ayudar por favor?

Código PHP:
/*
        Comprobar fichero adjunto
    */
    
if($adjunto_enviar==TRUE)
    {
        
$archivo=$_FILES['form_archivo']['name'];                // Nombre del archivo
        
$temporal=$_FILES['form_archivo']['tmp_name'];            // Ruta del fichero temporal
        // Comprobar si existe archivo a adjuntar
        
if($temporal!='')                                        // $temporal=='' si no hay adjunto
        
{
            
// Comprobar tamaño máximo del archivo
            
$adjunto_tamano=filesize($temporal)/1024;            // Tamaño del adjunto en KB
            
if($adjunto_tamano>=$adjunto_max)
                
$mensaje_error.=$mensaje_adjunto_max;
        }
    }
    else
        
$temporal='';                                            // Para indicar que no hay adjunto

    
if(empty($mensaje_error))                                    // No ha habido error, puedo enviar el mail
    
{
        
// Al mensaje del usuario le añado datos de control, como IP y hora.
        
$ip=ip();                                                    // IP del usuario.
        
setlocale (LC_TIME,$idioma);                                // Parametros locales para el tiempo.
        
$fecha=gmstrftime("%a, %d/%b/%y %H:%M:%S (%Z)",time());        // Hora de envio.
        
$mensaje_texto=$form_mensaje."\n\n".$numero_de_telefono.' '.$form_telefono."\n\n".$enviado_por.' '.$ip."\n".$enviado_el.' '.$fecha;

        
// Comprobar si verdaderamente hay adjunto
        
if($temporal!='')
        {
            
// Leer el adjunto
            
$buffer implode("",file($temporal));            // Leer fichero
            
$buffer chunk_split(base64_encode($buffer));    // Codificación en base64 y divido

            // Cabeceras necesarias para enviar el mail
            
$cabecera "MIME-version: 1.0\n";
            
$cabecera .= "From: $form_nombre<$form_email>\n";
            
$cabecera .= "Return-Path: $email_admin\n";
            
$cabecera .= "Content-type: multipart/mixed; ";
            
$cabecera .= "boundary=\"Message-Boundary\"\n";
            
$cabecera .= "Content-transfer-encoding: 7BIT\n";
            
$cabecera .= "X-attachments: $temporal";

            
// Adjuntar el fichero
            
$mensaje "\n\n--Message-Boundary\n";
            
$mensaje .= "Content-type: Binary; name=\"$archivo\"\n";
            
$mensaje .= "Content-Transfer-Encoding: BASE64\n";
            
$mensaje .= "Content-disposition: attachment; filename=\"$archivo\"\n\n";
            
$mensaje .= "$buffer\n";
            
$mensaje .= "--Message-Boundary--\n";

            
// Mensaje de texto plano
            
$mensaje .= "--Message-Boundary\n";
            
$mensaje .= "Content-type: text/plain; charset=ISO-8859-1\n";
            
$mensaje .= "Content-transfer-encoding: 7BIT\n";
            
$mensaje .= "Content-description: Mail message body\n\n";
            
$mensaje .=$mensaje_texto;
        }
        else
        {
            
// Cabeceras necesarias para enviar el mail
            
$cabecera "From: $form_nombre<$form_email>\n";
            
$cabecera .= "Return-Path: $email_admin\n";

            
// Mensaje de texto plano
            
$mensaje $mensaje_texto;
        }
        
// Envia mail. La @ evita que muestre por pantalla posibles fallos.
        
if (@mail($email_admin,$form_asunto,$mensaje,$cabecera))    // Envio del email correcto
            
echo gracias($mensaje_mail_enviado);                    // Mensaje final de agradecimiento
           
else                                                        // Ha fallado el envido del email
            
echo gracias($mensaje_mail_fallido);                    // Mensaje final de indicación de error
    
}
    else                                                            
// Ha habido algun error, vuelvo al formulario
    
{
        
// Indicación de los errores.
        
$mensaje_error=$mensaje_error_inicial.$mensaje_error.$mensaje_error_final;

        
// Volver a mostrar el formulario con los campos previamente escritos y el error.
        
echo formulario($form_nombre,$form_email,$form_telefono,$form_asunto,$form_mensaje,$mensaje_error);
    }
}
else                                                            
// Entrada por primera vez
    
echo formulario();                                            // Imprimir el formulario sin valores iniciales

// Función que elimina espacios en blancos innecesarios, html y similares.
function limpiar($texto)
{
    
$texto trim($texto);                            // Elimina espacios del principio y final de una cadena
    
$texto stripslashes($texto);                    // Eliminar barras invertidas
    
$texto strip_tags($texto);                    // Eliminar marcas html y php
    
return $texto;                                    // Volver de la función
}

/*
Función para validar un mail.
Devuelve TRUE si el mail tiene el formato correcto.
Devuelve FALSE si el mail tiene un formato incorrecto o el dominio no exista.
*/
function email_valido($email)
{
    if (
preg_match('!^[a-z0-9.+-_]+@([a-z0-9-]+(?:.[a-z0-9-]+)+)$!i',$email,$partes))
    {
        
// Comprobar que el dominio es correcto
        
if (!checkdnsrr($partes[1]))
            return 
FALSE;
        else
            return 
TRUE;
    }
    else
        return 
FALSE;
}

// Conocer IP
function ip()
{
    if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR']))
        
$ip $_SERVER['HTTP_X_FORWARDED_FOR'];
    elseif (isset(
$_SERVER['HTTP_VIA']))
        
$ip $_SERVER['HTTP_VIA'];
    elseif (isset(
$_SERVER['REMOTE_ADDR']))
        
$ip $_SERVER['REMOTE_ADDR'];
    else
        
$ip 'desconocida';

    return 
$ip;                                        // Devolver la IP
}

// Función que imprime el formulario.
// En caso de llamarse sin parametros los pone en blanco.
function formulario($form_nombre='',$form_email='',$form_telefono='',$form_asunto='',$form_mensaje='',$mensaje_error='')
{
    
// Varias globales definidas al inicio
    
global $titulo_nombre,$titulo_email,$titulo_telefono,$titulo_asunto,$titulo_mensaje;
    global 
$nombre_size,$email_size,$telefono_size,$asunto_size,$mensaje_cols,$mensaje_rows;
    global 
$titulo_web,$mensaje_principal,$nombre_max,$email_max,$telefono_max,$asunto_max;
    global 
$adjunto_enviar,$titulo_adjunto,$adjunto_max,$archivo_size;

    
$url=$_SERVER['PHP_SELF'];        // Dirección del formulario. Si en el formulario escribo directamente $_SERVER['PHP_SELF'] da problemas, por eso lo hago con otra variable.

    // Formulario para el envío de un fichero adjunto
    
if($adjunto_enviar==TRUE)
    {
        
$adjunto =<<<EOT
$titulo_adjunto<br />
<input type="file" name="form_archivo" class="imputbox" size="$archivo_size" /><br />
EOT;
    }
    else
        
$adjunto ='';

    
$formulario =<<<EOT 

Última edición por jam1138; 25/09/2006 a las 03:18