Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2013, 17:26
Avatar de Middrel
Middrel
 
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Formulario para enviar mails con adjunto + texto

Hola, buenas tardes...

Tengo un problema con un formulario para enviar un email, con su respectivo cuerpo en HTML (Texto) y algún archivo adjunto. Resulta que, o me envía sólo el texto o me envía sólo el adjunto. Busque por internet algunos ejemplos de como hacer esto pero no me están funcionando como debieran. Les explico:

Mi formulario es este:

Código HTML:
<form action="form-inscripcion.php" method="post" enctype="multipart/form-data" accept-charset="utf-8">
    <input id="nombre" class="forma-a" type="text" name="nombre" placeholder="Nombre del solicitante ( * Requerido )" />
    <input id="direccion" class="forma-a" type="text" name="direccion" placeholder="Dirección ( * Requerido )" />
    <input id="postal" class="forma-b" type="text" name="postal" placeholder="Dirección postal" />
    <input id="telefono" class="forma-b" type="text" name="telefono" placeholder="Teléfono ( * Requerido )" />
    <input id="fax" class="forma-b" type="text" name="fax" placeholder="Fax" />
    <input id="celular" class="forma-b" type="text" name="celular" placeholder="Celular" />
    <input id="email" class="forma-b" type="text" name="email" placeholder="Correo electrónico ( * Requerido )" />
    <input id="madre" class="forma-a" type="text" name="madre" placeholder="Nombre de la madre o tutora" />
    <input id="padre" class="forma-a" type="text" name="padre" placeholder="Nombre del padre o tutor" />
    ¿Cómo te enteraste del programa de verano?
    <textarea id="progverano" name="progverano"></textarea>
    ¿Qué sabes de la fundación?
    <textarea id="fundacion" name="fundacion"></textarea>
    <input id="escuela" type="text" name="escuela" placeholder="Escuela de procedencia" /><input id="grado" type="text" name="grado" placeholder="Grado" />
    ¿Trabajas? <select id="trabajas" name="trabajas"> 
                             <option value="0">Opción</option> 
                             <option value="Si">Si</option> 
                             <option value="No">No</option> 
                      </select>      
                      <input id="espef" type="text" name="espef" value="Especifica" />
    ¿Perteneces a organizaciones estudiantiles?
    <select id="organizaciones" name="organizaciones"> 
          <option value="0">Opción</option> 
          <option value="Si">Si</option> 
          <option value="No">No</option>
    </select>
    <input id="org" type="text" name="org" value="Especifica" />
    ¿Qué sección del programa prefiere?

    <select id="seccion" name="seccion"> <option value="0">Opción</option> <option value="Junio">Junio</option> <option value="Julio">Julio</option> </select>
    <input id="variable" type="hidden" name="variable" value="ES" />

    <strong>Para adjuntar tus documentos sobre ensayos, trabajos o material solicitado da cilck en el botón siguiente</strong> <input type="file" name="formfile" id="formfile" />

    ¿Terminaste? ¡Ahora envía tu solicitud de inscripción!

    <input id="enviar" class="forma-c" type="submit" name="enviar" value="¡Sí! ¡Quiero enviar mi solicitud ahora!" /><input id="limpiar" class="forma-c" type="reset" name="limpiar" value="No, reiniciaré el formulario" />

</form> 
y este es el código en PHP para enviar el formulario:

Código PHP:
Ver original
  1. if ($_POST['enviar']) {
  2.        
  3.         $num = md5(time());  /* Agregado */
  4.  
  5.         $sqlEnviarForma = mysql_query("Insert into wp_forms (form_nombre, form_direccion, form_postal, form_telefono, form_fax, form_celular, form_email, form_tutora, form_tutor, form_textarea_1, form_textarea_2, form_escuela, form_grado, form_trabajo, form_trab_especific, form_organizacion, form_org, form_programa, form_textarea_3, form_forma) Values ('$_POST[nombre]','$_POST[direccion]', '$_POST[postal]', '$_POST[telefono]', '$_POST[fax]', '$_POST[celular]', '$_POST[email]', '$_POST[madre]', '$_POST[padre]', '$_POST[progverano]', '$_POST[fundacion]', '$_POST[escuela]', '$_POST[grado]', '$_POST[trabajas]', '$_POST[espef]', '$_POST[organizaciones]', '$_POST[org]', '$_POST[seccion]', '1', '$_POST[variable]')");
  6.        
  7.         /* Sección de envio a el instituto */
  8.        
  9.         $today = date("Ymd");
  10.         $deemail=$_POST['email'];
  11.         $sfrom=$_POST['email'];
  12.         $sdestinatario= email@sitio.com.mx';
  13.         $ssubject="Formulario de Inscripción";
  14.                        
  15.         $shtml = ' Cuerpo del mensaje ';
  16.        
  17.  
  18.                 $num = md5(time());
  19.  
  20.                 //MAIL BODY
  21.                 $body = $shtml;
  22.  
  23.                 $_name=$_FILES["formfile"]["name"];
  24.                 $_type=$_FILES["formfile"]["type"];
  25.                 $_size=$_FILES["formfile"]["size"];
  26.                 $_temp=$_FILES["formfile"]["tmp_name"];
  27.  
  28.                 if( strcmp($_name, "") ) //FILES EXISTS
  29.                 {
  30.                 $fp = fopen($_temp, "rb");
  31.                 $file = fread($fp, $_size);
  32.                 $file = chunk_split(base64_encode($file));
  33.  
  34.                 // MULTI-HEADERS Content-Type: multipart/mixed and Boundary is mandatory.
  35.                 $headers = "From: <$sdestinatario>\r\n";
  36.                 $headers .= "MIME-Version: 1.0\r\n";
  37.                 $headers .= "Content-Type: multipart/mixed; ";
  38.                 $headers .= "boundary=".$num."\r\n";
  39.                 $headers .= "--".$num."\n";
  40.  
  41.                 // HTML HEADERS
  42.                 $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
  43.                 $headers .= "Content-Transfer-Encoding: 8bit\r\n";
  44.                 $headers .= "".$body."\n";
  45.                 $headers .= "--".$num."\n";
  46.  
  47.                 // FILES HEADERS
  48.                 $headers .= "Content-Type:application/octet-stream ";
  49.                 $headers .= "name=\"".$_name."\"r\n";
  50.                 $headers .= "Content-Transfer-Encoding: base64\r\n";
  51.                 $headers .= "Content-Disposition: attachment; ";
  52.                 $headers .= "filename=\"".$_name."\"\r\n\n";
  53.                 $headers .= "".$file."\r\n";
  54.                 $headers .= "--".$num."--";
  55.  
  56.                 }else { //FILES NO EXISTS
  57.  
  58.                 // HTML HEADERS
  59.                 $headers = "From: $sdestinatario \r\n";
  60.                 $headers .= "MIME-Version: 1.0\r\n";
  61.                 $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
  62.                 $headers .= "Content-Transfer-Encoding: 8bit\r\n";
  63.                 }
  64.  
  65.                 // SEND MAIL
  66.                 mail($sdestinatario, $ssubject , $body, $headers);
  67.  
  68.                 echo "<div class='ok'>
  69.                 <strong>El formulario se ha enviado correctamente.</strong></div>";

No localizó el porque no me deja enviar ambos (cuerpo y adjunto) al mismo tiempo. ¿Alguna idea?

De antemano les agradezco por sus comentarios.

Saludos!