No quería utilizar librerías y no tengo demasiado experiencia en este tema. Así que, después de investigar por la red, he conseguido confeccionar un código que funciona bastante bien. Y lo más importante, es que he entendido que hace cada línea de código.
A veces, con las prisas nos dedicamos a copiar y pegar, pero al final siempre es un atraso pq. funciona pero no sabemos lo que hemos hecho ... es mucho mejor perder un poco de tiempo (si se dispone de él claro) y comprender.
HTML:
<form accept-charset="utf-8" action="GME__trabaja_con_nosotros.php" class="trabaja" enctype="multipart/form-data" id="formulario" method="post">
<input type="text" id="nombre" name="nombre" value="Nombre" />
<input type="text" id="apellido" name="apellido" value="Apellidos" />
<input type="text" id="email" name="email" value="e-mail" />
<input type="text" id="telefono" name="telefono" value="Telefono" />
<input type="file id="filead" name="filead" />
<input type="checkbox" id="condiciones" name="condiciones" />
<input type="submit" value="Enviar Formulario />
</form>
En la parte del HTML lo más importante es el "enctype" del form:
Para que podamos adjuntar archivos tiene que ser:
enctype="multipart/form-data"
Encontramos una excelente explicación en:
http://w3schools.com/tags/att_form_enctype.asp
PHP:
<?php
if ($_POST){
$num = md5(time());
//MAIL BODY
$body = “
<html>
<head>
<title>Formulario Trabaja con nosotros</title>
</head>
<body style='background:#EEE; padding:30px;'>
<h2 style='color:#767676;'>Trabaja con nosotros</h2>";
$body .= "
<strong style='color:#0090C6;'>Nombre: </strong>
<span style='color:#767676;'>" . $_POST["nombre"] . "</span>";
$body .= "
<strong style='color:#0090C6;'>Apellidos: </strong>
<span style='color:#767676;'>" . $_POST["apellido"] . "</span>";
$body .= "
<strong style='color:#0090C6;'>Email: </strong>
<span style='color:#767676;'>" . $_POST["email"] . "</span>";
$body .= "
<strong style='color:#0090C6;'>Teléfono: </strong>
<span style='color:#767676;'>" . $_POST["telefono"] . "</span>";
$body .= "</body></html>";
$_name=$_FILES["filead"]["name"];
$_type=$_FILES["filead"]["type"];
$_size=$_FILES["filead"]["size"];
$_temp=$_FILES["filead"]["tmp_name"];
if( strcmp($_name, "") ) //FILES EXISTS
{
$fp = fopen($_temp, "rb");
$file = fread($fp, $_size);
$file = chunk_split(base64_encode($file));
// MULTI-HEADERS Content-Type: multipart/mixed and Boundary is mandatory.
$headers = "From: GME <gme@garciamunte.com>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; ";
$headers .= "boundary=".$num."\r\n";
$headers .= "--".$num."\n";
// HTML HEADERS
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "".$body."\n";
$headers .= "--".$num."\n";
// FILES HEADERS
$headers .= "Content-Type:application/octet-stream ";
$headers .= "name=\"".$_name."\"r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";
$headers .= "Content-Disposition: attachment; ";
$headers .= "filename=\"".$_name."\"\r\n\n";
$headers .= "".$file."\r\n";
$headers .= "--".$num."--";
}else { //FILES NO EXISTS
// HTML HEADERS
$headers = "From: GME
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
}
// SEND MAIL
mail("laroca73@gmail.com", "WEB - Trabaja con nosotros" , $body, $headers);
echo "<div class='ok'>
<strong>El formulario se ha enviado correctamente.</strong></div>";
}
?>
Aunque visto así, tan ordenadito parece muy fácil ... me costó mucho encontrar un ejemplo que funcionara y que explicara un poco qué estaba haciendo.
El principal problema que encontré es que era capaz de enviar un mail con texto, y un mail con archivo adjunto pero no encontraba la manera de enviar texto+archivo adjunto en el mismo mail.
La clave está en las cabeceras.
El Content Type tiene que ser: multipart/mixed.
Y tenemos que definir un "boundary", es un separador único que nos permite utilizar diferentes cabeceras dentro del mismo mail.
Podemos encontrar una buena explicación en: http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
Este código es la base o el patrón, a partir de él podemos customizar el envío de mails controlando el peso de los archivos que permitimos subir (Ej/5Mb) o bien el tipo de archivos (Ej/.zip, .pdf ..etc)
http://www.w3schools.com/php/php_file_upload.asp
Espero que os sirva de ayuda!