Comunidad de diseño web y desarrollo en internet online

Php Email Attach + filtrar extensiones a adjuntar

Citar            
MensajeEscrito el 05 May 2011 04:00 pm
Buenas,

Estoy tratando de enviar un email con un adjunto, pero necesito que el adjunto solo sea doc o pdf.. Como lo puedo hacer??

Código HTML :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ejemplo Enviar Adjunto Email - 1</title>
</head>

<body>
        <form name='formulario' id='formulario' method='post' action='enviar_mail.php' enctype="multipart/form-data">
            <p>Nombre <input type='text' name='Nombre' id='Nombre'></p>
            <p>Apellidos <input type='text' name='Apellidos' id='Apellidos'></p>
            <p>E-mail <input type='text' name='E-mail' id='E-mail'></p>
            <p><input type='radio' value='Hombre' name='Sexo' id='Sexo'>Hombre</p>
            <p><input type='radio' value='Mujer' name='Sexo' id='Sexo'>Mujer</p>
            <p>Adjuntar archivo1: <input type='file' name='archivo1' id='archivo1'></p>
            <p>Adjuntar archivo2: <input type='file' name='archivo2' id='archivo2'></p>
            <p align='center'>
                <input type='submit' value='Enviar formulario'>
                <input type='reset' value='resetear formulario'>
            </p>
        </form> 
</body>
</html>



Código PHP :

<?php
    
    function form_mail($sPara, $sAsunto, $sTexto, $sDe)
    {
    
        $bHayFicheros = 0;
        $sCabeceraTexto = "";
        $sAdjuntos = "";
        $sCuerpo = $sTexto;
        $sSeparador = uniqid("_Separador-de-datos_");
        
        $sCabeceras = "MIME-version: 1.0\n";
        
        // Recogemos los campos del formulario
        foreach ($_POST as $sNombre => $sValor)
            $sCuerpo = $sCuerpo."\n".$sNombre." = ".$sValor;
            
        // Recorremos los Ficheros
        foreach ($_FILES as $vAdjunto)
        {
            
            if ($bHayFicheros == 0)
            {
                
                // Hay ficheros
                
                $bHayFicheros = 1;
                
                // Cabeceras generales del mail
                $sCabeceras .= "Content-type: multipart/mixed;";
                $sCabeceras .= "boundary=\"".$sSeparador."\"\n";
                
                // Cabeceras del texto
                $sCabeceraTexto = "--".$sSeparador."\n";
                $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
                $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n\n";
                
                $sCuerpo = $sCabeceraTexto.$sCuerpo;
                
            }
            
            // Se añade el fichero
            if ($vAdjunto["size"] > 0)
            {
                $sAdjuntos .= "\n\n--".$sSeparador."\n";
                $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";
                $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
                $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";                 
                
                $oFichero = fopen($vAdjunto["tmp_name"], 'rb');
                $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
                $sAdjuntos .= chunk_split(base64_encode($sContenido));
                fclose($oFichero);
            }
            
        }
        
        // Si hay ficheros se añaden al cuerpo
        if ($bHayFicheros)
            $sCuerpo .= $sAdjuntos."\n\n--".$sSeparador."--\n";
        
        // Se añade la cabecera de destinatario
        if ($sDe)$sCabeceras .= "From:".$sDe."\n";
        
        // Por último se envia el mail
        return(mail($sPara, $sAsunto, $sCuerpo, $sCabeceras));
    }
        
        //Ejemplo de como usar:
        if (form_mail("[email protected]",
                                    "Test Attach - v1",
                                    "Los datos introducidos en el formulario son:\n",
                                    "[email protected]"))
            echo "Su formulario ha sido enviado con exito";

?> 


Desde ya muchas gracias!!!

Saludos

Por T1000

Claber

121 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 May 2011 04:14 pm
Utiliza esta función:

Código PHP :

function ExtraerExtension($archivo) {
   $aux = pathinfo($archivo);
   if (isset($aux['extension'])) {
      return $aux['extension'];
   } else {
      return "";
   }
}


Y la usas así:

Código PHP :

$extencionesvalidas = array("doc","pdf");
if (in_array(ExtraerExtension($nombredelarchivo),$extencionesvalidas)) {
   echo "Archivo válido";
} else {
   echo "Archivo NO válido";
}


La variable $nombredelarchivo debe ser el nombre original del archivo, no el nombre temporal que se genera cuando se sube un archivo. Porque por lo que veo en el código estás adjuntando directamente desde el temporal.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 05 May 2011 04:14 pm
Perfecto!!! Muchas gracias!!!

Por T1000

Claber

121 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 May 2011 04:38 pm
Hola DriverOp!

Estoy tratando de juntar mi codigo de envio de email con adjunto con la funcion para que me filtre la extension.

Este seria el codigo actualizado:

Código PHP :

<?php
      require("class.phpmailer.php");
      
      $mail = new PHPMailer();
      
      $mail->From     = $_POST['email'];
      $mail->FromName = $_POST['nombre'];
      $mail->AddAddress($direccion_envio); 
      $mail->AddReplyTo($_POST['email'],$_POST['nombre']);
      $mail->IsHTML(true);                              
      $comentario=$_POST['comentario'];
   
   //Extraer Extension
   function ExtraerExtension($archivo) { 
      $aux = pathinfo($archivo); 
      if (isset($aux['extension'])) { 
        return $aux['extension']; 
      } else { 
        return ""; 
      } 
   }       
    
    function form_mail($sPara, $sAsunto, $sTexto, $sDe)
    {
    
        $bHayFicheros = 0;
        $sCabeceraTexto = "";
        $sAdjuntos = "";
        $sCuerpo = $sTexto;
        $sSeparador = uniqid("_Separador-de-datos_");
        
        $sCabeceras = "MIME-version: 1.0\n";
  

        // Recorremos los Ficheros
        foreach ($_FILES as $vAdjunto)
        {
            
            if ($bHayFicheros == 0)
            {
                
                // Hay ficheros
                
                $bHayFicheros = 1;
                
                // Cabeceras generales del mail
                $sCabeceras .= "Content-type: multipart/mixed;";
                $sCabeceras .= "boundary=\"".$sSeparador."\"\n";
                
                // Cabeceras del texto
                $sCabeceraTexto = "--".$sSeparador."\n";
                $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
                $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n\n";
                
                $sCuerpo = $sCabeceraTexto.$sCuerpo;
                
            } 
         
            // Se añade el fichero
            if ($vAdjunto["size"] > 0)
            {
                $sAdjuntos .= "\n\n--".$sSeparador."\n";
                $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";
                $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
                $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";                 
                
                $oFichero = fopen($vAdjunto["tmp_name"], 'rb');
                $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
                $sAdjuntos .= chunk_split(base64_encode($sContenido));
                fclose($oFichero);
            }
            
        }
        
        // Si hay ficheros se añaden al cuerpo
        if ($bHayFicheros)
            $sCuerpo .= $sAdjuntos."\n\n--".$sSeparador."--\n";
        
        // Se añade la cabecera de destinatario
        if ($sDe)$sCabeceras .= "From:".$sDe."\n";
        
      $extencionesvalidas = array("doc","pdf"); 
         if (in_array(ExtraerExtension($nombredelarchivo),$extencionesvalidas)) 
         {  
            // Por último se envia el mail
            return(mail($sPara, $sAsunto, $sCuerpo, $sCabeceras));
            {
            
               //Ejemplo de como usar:
               if (form_mail("[email protected]",
               "Presupuesto: ".$_POST['nombre'] ,      
               "Enviado el ".  date("d M Y G i")."\n"."\n"."Nombre : ".$_POST['nombre']."\n". "Email : ".$_POST['email']."\n"."\n"."Comentario: "."\n".$_POST['comentario'],                        
               "[email protected]"))
            
               echo "Su formulario ha sido enviado con exito";      
            }         
         } 
         else 
         { 
            echo "Archivo NO válido"; 
         } 
?> 


Me tira error en la ultima linea

Código PHP :

         else 
         { 
            echo "Archivo NO válido"; 
         } 
?> //<---- ERROR 


Que estoy haciendo mal???

Muchas gracias!! Saludos

Por T1000

Claber

121 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 May 2011 05:11 pm
Tienes un cacao de código de madre y señor mío :P.

Bien pues, como no dices qué error está provocando (acostúmbrate a señalar el mensaje de error que te devuelve PHP cuando pidas ayuda) he tenido que transportar el código a mi editor y rápidamente me doy cuenta que la funcion form_mail() no está cerrada: te falta la llave de cierre (}).

Pero ese es el menor de tus problemas. Has pegado el código que te he dado tal cual sin mirar si las variables que yo usé tienen sentido en tu código. Esto, sumado a que cometes un grave error de lógica (llamas a la funcion form_mail dentro de la propia función haciendo que esta sea recursiva pero sin condición de salida, por tanto entra en bucle infinito) me dice que tienes poca idea de programar.

Será mejor que practiques con códigos más simples hechos por ti antes de lanzarte a esto más complicado.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.