Ti posto le istruzioni che potrebbero fare al caso tuo, ovviamente lo devi adeguare alle tue esigenze. In rete si trovano molti esempi, anche con descrizioni dettagliate, spero che il codice postato ti possa essere utile.
// $allegato è il campo file del form
$allegato = $_FILES ['file'];
if ($allegato ['tmp_name'] !== null && $allegato ['tmp_name'] !== "") {
/***** Istruzioni per l'allegato *****/
if (is_uploaded_file($allegato ['tmp_name'])) {
$separatore = "==Multipart_Boundary_x" . md5(mt_rand()) . "x";
/***** lettura file allegato *****/
$file = fopen($allegato ['tmp_name'],'rb');
$data = fread($file,filesize($allegato ['tmp_name']));
fclose($file);
/*********************************/
$testoEmail .= "<html><body>";
$testoEmail ="TESTO EMAIL IN FORMATO HTML";
$testoEmail .= "</body></html>";
$data = chunk_split(base64_encode($data));
/***** creazione header messaggio *****/
$headers = "From: " . $nominativo;
$headers .= "<EMAIL MITTENTE>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n";
$headers .= " boundary=\"" . $separatore . "\n";
/**************************************/
/***** creazione del corpo del mesaggio e aggiunta dell'allegato *****/
$testoConAllegato = "--" . $separatore . "\n" . "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$testoConAllegato .= "Content-Transfer-Encoding: 7bit\n\n" . $testoEmail . "\n\n";
$testoConAllegato .= "--" . $separatore . "\n" . "Content-Type: " . $allegato ['type'] . ";\n";
$testoConAllegato .= " name=\"" . $allegato ['name'] . "\"\n" . "Content-Transfer-Encoding: base64\n\n";
$testoConAllegato .= $data . "\n\n" . "--" . $separatore . "--\n";
/************************************************** *******************/
}
mail($indirizzoEmail,$oggetto,$testoConAllegato,$h eaders);