Mi trovo a dover risolvere un curioso problema (almeno per me che conosco poco il PHP).
Consiste in questo: uso da un po' degli script mediati da questo sito e un po' da altre esperienze, per inviare email tramite script php, con allegati.
Devo dire che sembra funzionare egregiamente:
Codice PHP:
<?php
// Campi da variare per personalizzare il messaggio
$destinatario "info@miosito.it";
$redirOK "http://www.miosito.it/mail/ok.asp";
$redirKO "http://www.miosito.it/mail/ko.asp";

//Questa parte non deve essere modificata!
function clean($key) {
    
$key=str_replace("\\"""$key);
    
$find=array(
        
"/bcc\:/i",
        
"/Content\-Type\:/i",
        
"/Mime\-Type\:/i",
        
"/cc\:/i",
        
"/to\:/i"
    
);
  
$key=preg_replace($find,"",$key);
  return 
$key;
}

// Recupero il valore dei campi del form
extract($_POSTEXTR_SKIP);


// Valorizzo le variabili relative all'allegato
$allegato $_FILES['allegato']['tmp_name'];
$allegato_type $_FILES['allegato']['type'];
$allegato_name $_FILES['allegato']['name'];

// Genero il "separatore"
// Serve per dividere, appunto, le varie parti del messaggio.
// Nel nostro caso separerà la parte testuale dall'allegato
$semi_rand md5(time());
$mime_boundary "{$semi_rand}";

// Aggiungo intestazioni e routines necessarie per l'allegato
$messaggio clean($messaggio);

// Controllo che nome, destinatario, mittente e oggetto siano riportati
if (trim($destinatario) == "") {
header("location: $redirKO"); 
exit;
}
if (
trim($mittente) == "") {
header("location: $redirKO"); 
exit;
}
if (
trim($nome) == "") {
$nome $mittente;}

if (
trim($oggetto) == "") {
header("location: $redirKO"); 
exit;
}
$headers "From: " $nome " <".$mittente.">";
// Definisco il tipo di messaggio (MIME/multi-part)
$headers .= "\nMIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n";
$headers .= " boundary=\"{$mime_boundary}\"\n";
$headers .="This is a multi-part message in MIME format.\n";
$msg "";

// Verifico se il file è stato caricato correttamente via HTTP
// In caso affermativo trasformo il file
if (is_uploaded_file($allegato))
{
  
// Apro e leggo il file allegato
  
$file fopen($allegato,'rb');
  
$data fread($filefilesize($allegato));
  
fclose($file);

  
// Adatto il file al formato MIME base64 usando base64_encode
  
$data chunk_split(base64_encode($data));  
}

// Questa è la parte "testuale" del messaggio
$msg .= "--{$mime_boundary}\n"// Metto il separatore
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$msg .= "Content-Transfer-Encoding: quoted-printable\n\n";
//  $msg .= "Content-Transfer-Encoding: 7bit\n\n";
$msg .= $messaggio "\n\n";

// Se abbiamo un allegato...
if (is_uploaded_file($allegato))
{
  
// Aggiungo l'allegato al messaggio
  
$msg .= "--{$mime_boundary}\n"// inizializzato da un separatore
  
$msg .= "Content-Disposition: attachment;\n";
  
$msg .= " filename=\"{$allegato_name}\"\n";
  
$msg .= "Content-Transfer-Encoding: base64\n\n";
  
$msg .= $data "\n\n";
}
// Alla fine, in ogni caso, chiudo con il separatore di fine messaggio terminato da due hyphens
$msg .= "--{$mime_boundary}--\n";

// Invio la mail
if (mail($destinatario$oggetto$msg$headers))
{
  
header("location: $redirOK"); 
}else{
  
header("location: $redirKO"); 
}
?>

Succede però che alcuni allegati (non piccoli, ma non giganteschi) non producano alcun invio: vale a dire, esce per "ok", ma la mail indicata in testa non riceve nulla.
Non vedo qui, alcun controllo di dimensione, ma naturalmente può essere che mi sbaglio, o che ci sia un limite di default che io non conosco, o non so dove trovare.

Qualcuno sa darmi qualche spunto?
Grazie.