Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/03/2011, 10:32
user69
 
Fecha de Ingreso: noviembre-2010
Mensajes: 15
Antigüedad: 15 años, 10 meses
Puntos: 0
Problemas con los adjuntos .rar y .zip

Hola

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>";
}

}
?>