He estado mirando varios hilos que parecían tener el mismo problema pero se referían al uso del array y a la utilización de $_FILES para solucionar este problema, y creo que son correctos en este script.
El problema está en que no adjunta archivos .rar ni .zip. Recoge bien todos los datos y los envía correctamente, incluso los adjunto que no son .rar o .zip, como los .jpeg, y .gif.
He probado a definir los archivos rar/zip en el array como
'application/zip'=>1,
'application/rar'=>1
a extenderlos
'application/zip'=>1,
'application/x-zip-compressed'=>1,
'application/rar'=>1,
'application/x-rar-compressed'=>1
y de forma general como
'application/octet-stream'=>1
Pero nunca consigo recibirlos.
El script lo que hace es recibir un formulario con adjuntos y enviarlo a una dirección de email automáticamente. La parte del formulario la he omitido ya que no da ningún problema. El problema lo dan los adjuntos rar/zip solamente.
Alguna idea?
Muchas gracias.
Código PHP:
<?php
function mailMe($subject,$message,$fileName){
// Read POST request params into global vars
//$to = "[email protected]";
$to = "[email protected]";
$from = "www.domain.com <[email protected]>";
//$subject = $_POST['subject'];
//$message = $_POST['message'];
// Obtain file upload vars
$fileatt = $_FILES[$fileName]['tmp_name'];
$fileatt_type = $_FILES[$fileName]['type'];
$fileatt_name = $_FILES[$fileName]['name'];
$headers = "From: $from";
// allowed file types to attach
$allowed_file_types = array('image/jpeg'=>1,'image/pjpeg'=>1,'image/gif'=>1,'image/png'=>1,'image/x-png'=>1,'application/zip'=>1,'application/rar'=>1);
//echo '<pre>';
//var_export($_FILES);
//echo '</pre>';
if (isset($_FILES[$fileName]['name']) && is_uploaded_file($fileatt) && isset($allowed_file_types[$fileatt_type])) {
// Read the file to be attached ('rb' = read binary)
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
// Generate a boundary string
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
// Add the headers for a file attachment
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
// Add a multipart boundary above the plain message
$message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";
// Base64 encode the file data
$data = chunk_split(base64_encode($data));
// Add file attachment to the message
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
//"Content-Disposition: attachment;\n" .
//" filename=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
}
// Send the message
$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
return true; //echo "<p>Mail sent! Yay PHP!</p>";
} else {
return false; //echo "<p>Mail could not be sent. Sorry!</p>";
}
}
?>