Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/03/2011, 10:32
user69
 
Fecha de Ingreso: noviembre-2010
Mensajes: 15
Antigüedad: 14 años
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>";
}

}
?>