Buongiorno a tutti,
non riesco a venire fuori da questo problema pur avendo letto diverse soluzioni in rete. Lo script che posto di seguito funziona perfettamente per quanto riguarda l'invio di mail con allegato. Unico problema le lettere accentate nel corpo della mail che vengono convertite in modo sbagliato quando l'utente riceve la mail. Vi posto il codice:
Sulla pagina ufficiale di PHP ho anche trovato questa funzione (che richiamo subito dopo //Invio mail) che risolverebbe i problemi di accento ma che però me ne crea sull'allegato in quanto non riesce a mandarlo:
Qualcuno può dirmi dove sbaglio? Grazie in anticipo
non riesco a venire fuori da questo problema pur avendo letto diverse soluzioni in rete. Lo script che posto di seguito funziona perfettamente per quanto riguarda l'invio di mail con allegato. Unico problema le lettere accentate nel corpo della mail che vengono convertite in modo sbagliato quando l'utente riceve la mail. Vi posto il codice:
Codice:
// Recupero il valore dei campi del form
$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
$destinatario= $_POST['destinatario'];
// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['allegato']['tmp_name'];
$allegato_type = $_FILES['allegato']['type'];
$allegato_name = $_FILES['allegato']['name'];
// Creo altre due variabili ad uno interno
$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; filename=\"{$allegato_name}\"\n";
$msg .= "Content-Transfer-Encoding: base64\n\n";
$msg .= $data . "\n\n";
// chiudo con il separatore
$msg .= "--{$mime_boundary}--\n";
}
// se non è stato caricato alcun file
// preparo un semplice messaggio testuale
else
{
$msg = $messaggio;
}
// Invio la mail
mail($destinatario, $oggetto, $msg, $headers)
Sulla pagina ufficiale di PHP ho anche trovato questa funzione (che richiamo subito dopo //Invio mail) che risolverebbe i problemi di accento ma che però me ne crea sull'allegato in quanto non riesce a mandarlo:
Codice:
function mail_utf8($to, $from_user, $from_email, $subject = '(No subject)', $message = '')
{
$from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
$headers = "From: $from_user <$from_email>\r\n".
"MIME-Version: 1.0" . "\r\n" .
"Content-type: text/html; charset=UTF-8" . "\r\n";
return mail($to, $subject, $message, $headers);
}
Qualcuno può dirmi dove sbaglio? Grazie in anticipo