ciao a tutti,
premetto che di php so poco e niente.. ho bisogno di inserire sul mio sito un form php per invio mail con allegato..ne ho trovato uno già pronto in rete, l'ho modificato secondo le mie esigenze però su un server funziona..sul server del mio cliente no.. non so come mai, soprattutto perchè non sono pratico di queste cose. le uniche informazioni che sono riuscito ad avere è che entrambi i server sono Linux, e su quello del mio cliente è attiva la funzione sendmail. riporto qui sotto i due files:
Codice PHP:
<form action="invioMail.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="destinatario" value="miamail">
<table border="0">
<tr>
<td>Tua Mail:</td>
<td><input type="text" name="mittente" value="" /></td>
</tr>
<tr>
<tr>
<td>Scegli Selezione</td>
<td>
<select name="selezione">
<option value="..">opzione1</option>
<option value="..">opzione2</option>
<option value="..">opzione3</option>
</select>
</td>
</tr>
<tr>
<td>Oggetto:</td>
<td><input type="text" name="oggetto" value="" /></td>
</tr>
<tr>
<td>Messaggio:</td>
<td><textarea cols="20" rows="4" name="messaggio"></textarea></td>
</tr>
<tr>
<td>Allega Curriculum:</td>
<td><input type="file" name="allegato" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Invia" /></td>
</tr>
</table>
</form>
file invioMail.php
Codice PHP:
<?php
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$selezione = $_POST['selezione'];
$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";
$msg .= $selezione . "\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))
{
echo "
Mail inviata con successo!</p>";
}else{
echo "
Errore!</p>";
}
?>