urgente formail non mi funziona bene..

  • Creatore Discussione Creatore Discussione hypno
  • Data di inizio Data di inizio

hypno

Nuovo Utente
15 Nov 2007
3
0
0
buonasera avrei bisogno di un formmail con allegato ..come questo
che però mi faccia scegliere la dimensione massima dell'allegato e che mi garantisca comunque un allegato di almeno 5 mb .
perchè ho notato che con questo se allego un file di pochi kb tipo un immagine .gif ,mi arriva il messaggio con allegato tutto ok .
se già voglio caricare una foto o un mp3 mi dice messaggio inviato correttamente ma in realtà nella mia casella (1gb di spazio web mail domini di aruba) non mi arriva nulla nemmeno il messaggio...
grazie mille.




PHP:
<?php 
// Recupero il valore dei campi del form 
$destinatario = $_POST['destinatario']; 
$mittente = $_POST['mittente']; 
$oggetto = $_POST['oggetto']; 
$messaggio = $_POST['messaggio']; 

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

// Creo 2 variabili che riempirò più avanti... 
$headers = "From: " . $mittente; 
$msg = ""; 

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

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

// 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 = "==Multipart_Boundary_x{$semi_rand}x"; 

// Aggiungo le intestazioni necessarie per l'allegato 
$headers .= "\nMIME-Version: 1.0\n"; 
$headers .= "Content-Type: multipart/mixed;\n"; 
$headers .= " boundary=\"{$mime_boundary}\""; 

// Definisco il tipo di messaggio (MIME/multi-part) 
$msg .= "This is a multi-part message in MIME format.\n\n"; 

// Metto il separatore 
$msg .= "--{$mime_boundary}\n"; 

// Questa è la parte "testuale" del messaggio 
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
$msg .= "Content-Transfer-Encoding: 7bit\n\n"; 
$msg .= $messaggio . "\n\n"; 

// Metto il separatore 
$msg .= "--{$mime_boundary}\n"; 

// Aggiungo l'allegato al messaggio 
$msg .= "Content-Disposition: attachment;\n"; 
$msg .= " filename=\"{$allegato_name}\"\n"; 
$msg .= "Content-Transfer-Encoding: base64\n\n"; 
$msg .= $data . "\n\n"; 

// chiudo con il separatore 
$msg .= "--{$mime_boundary}--\n"; 
} 
else 
{ 
$msg = $messaggio; 
} 

// Invio la mail 
if (mail($destinatario, $oggetto, $msg, $headers)) 
{ 
header('Location: grazie.htm'); 
}else{ 
header('Location: errore.htm'); 
} 
?>
 
Lo spazio della tua casella email non centra, nel file di configurazione di php (php.ini) c'è una direttiva (upload_max_filesize) che definisce la dimensione massima consentita per l'upload di un file.
E' il valore di quella direttiva che và modificato.
 
Ultima modifica:
Il file Php.ini è necessario per il funzionamento di php, se non hai accesso ad esso dovresti richiedere alla assisistenza del tuo hosting di modificare quella direttiva.
 
in alternativa potresto provare a inserire direttamente la modifica della direttiva nel tuo codice scrivendo all'inizio:
PHP:
ini_set('max_upload_filesize', 520000);
ma non sempre funziona
 
Ho trovato questo post (credo vecchio), proprio provando a risolvere un problema che mi trovo a non sapere risolvere.
Ho verificato l'esatto problema qui riportato: in pratica un formmail derivato e praticamente identico a quanto esemplificato su questo stesso sito: https://www.mrw.it/php/articoli/inviare-email-allegati-usando-php_497.html

Lo script, come dice l'autore originale di questo post, funziona bene, ma non se si allegano immagini, anche non troppo grandi. Per esempio, una immagine di 65K non arriva, la stessa immagine, ridotta (è un jpg) solo diminuendo la qualità a 52K arriva benissimo. Si tenga conto che non è segnalata alcuna malfunzione: la routine esce per invio Ok!

Quanto suggerito qui sopra non pare applicarsi al problema: nel mio caso il valore previsto per upload_max_filesize è 50M.

Cosa poi più strana, abbiamo ricevuto bene dei files DOC di 700K, ma (mi dicono gli utenti) non hanno mai ricevuto un secondo DOC di 90K.

Questo comportamento non è invece così variabile per quanto riguarda le immagini, che non possono superare i 52K come ho già detto. Non posso giurare sul DOC di 90K e la segnalazione serve solo a riportare tutte le informazioni attualmente in mio possesso.
 

Discussioni simili