ho dato un'occhiata allo script che mi hai suggerito e ne ho creato uno prenendone spunto dal tuo, metterò un controllo dei campi in javascript. Però ho 3 problemi: se invio l'email senza l'allegato dice che ci sono problemi, se la invio con allegato dice che c'è un errore nella funzione mime_content_type e poi non capisco alcuni passaggi, che ho segnato con un commento.
questo è il file invia_mail.htm
codice:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Invia un'email</title>
<style type="text/css">
<!--
body,td,th,table {
font-family: Tahoma;
font-size: 12px;
color: #000000;
}
body {
background-color: #FFFFFF;
}
a {
font-size: 12px;
color: #000000;
}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000000;
}
a:hover {
text-decoration: none;
color: #FFFFFF;
}
a:active {
text-decoration: none;
color: #000000;
}
-->
</style></head>
<body>
<center>Invia un'email</center>
<form action="mail.php" method="post" enctype="multipart/form-data">
A: <input type="text" id="email" name="email">
Oggetto: <input type="text" id="oggetto" name="oggetto">
Testo: <textarea cols="35" rows="5" id="testo" name="testo"></textarea>
Allegato (opzionale): <input type="file" id="allegato" name="allegato">
<input type="submit" name="invia" id="invia" value="Invia l'email">
</form>
</body>
</html>
non credo che ci siano problemi con questo file
.
ecco invece il file mail.php
Codice PHP:
<html>
<head>
<style type="text/css">
<!--
BODY {
color: #000000;
font-family: Tahoma;
font-size: 12px;
}
</style>
</head>
<body>
<?php
if(!isset($_FILES)) { //rendiamo lo script compatibile con le precedenti versioni di php
$_FILES = $HTTP_POST_FILES;
}
$server = "invio_mail@{$_SERVER['HTTP_HOST']}"; /*il mittente non esiste in realtà, a meno che non si
abbia un email reale [email]webmaster@(tuosito.com[/email]) o il tuo server, ma comunque per una questione estetica
mettiamo che l'email sia inviata dal webmaster*/
$mittente = "Serviziodiinviomaildi{$_SERVER['HTTP_HOST']}<{$server}>"; /*
in pratica: Servizio di invio mail di (server) <invio_mail@(server)>*/
$risposta = "tuamail@dominio.it"; //la mail a cui rispondere
$testo = $_POST['testo']; /*ricaviamo il testo da inviare*/
$email = $_POST['email']; /*ricaviamo l'indirizzo a cui inviare la mail*/
$oggetto = $_POST['oggetto']; /*ricaviamo l'oggetto della mail*/
function allegato() { //creiamo il corpo dell'email con l'allegato
$allegato = $_FILES['allegato']['tmp_name']; //spiegatemi questo passaggio
$allegato = $_FILES['allegato']['name']; //spiegatemi questo passaggio
move_uploaded_file($allegato_tmp, "./tmp/".$allegato); //spiegatemi questo passaggio
$mime_allegato = mime_content_type("./tmp/".$allegato); //spiegatemi questo passaggio
$dimensione_allegato = filesize("./tmp/".$allegato);
$boundary = md5(uniqid(microtime())); //spiegatemi questo passaggio
$intestazioni = "From: $mittente\n"; //settiamo come mittente della mail la variabile $mittente
$intestazioni .= "Reply-To: $risposta\n"; //impostiamo l'indirizzo email a cui rispondere
$intestazioni .= "MIME-version: 1.0\n";
$intestazioni .= "Content-type: multipart/mixed;\n boundary=\"$boundary\"\n";
$intestazioni .= "Content-transfer-encoding: 7BIT\nX-attachments: $allegato";
$intestazioni_corpo = "--$boundary\n"; //spiegatemi questo passaggio
$intestazioni_corpo .= "Content-type: text/html; charset=iso-8859-1\n"; /*impostiamo il formato
della mail in HTML*/
$intestazioni_corpo .= "Content-transfer-encoding: 7BIT\n";
$intestazioni_corpo .= "Content-description: Mail message body\n\n";
$corpo_messaggio = $intestazioni_corpo . $testo;
$apertura_allegato = fopen("./tmp/".$allegato, "r");
$contenuto_allegato = fread($apertura_allegato, $dimensione_allegato);
$allegato_codificato = chunk_split(base64_encode($contenuto_allegato));
fclose($apertura_allegato);
$corpo_messaggio .= "\n\n--$boundary\n"; //spiegatemi questo passaggio
$corpo_messaggio .= "Content-type: $mime_allegato; name=\"$allegato\"\n";
$corpo_messaggio .= "Content-Transfer-Encoding: BASE64\n";
$corpo_messaggio .= "Content-disposition: attachment; filename=\"$allegato\"\n\n";
$corpo_messaggio .= "$allegato_codificato\n"; //e infine l'allegato
$corpo_messaggio .= "--$boundary--\n"; //spiegatemi questo passaggio
unlink($allegato); //eliminiamo il file temporaneo dell'allegato, che ora sta nell'email
}
function no_allegato() { //la mail senza allegato
$intestazioni = "From: $mittente\n"; //settiamo come mittente della mail la variabile $mittente
$intestazioni .= "Reply-To: $risposta\n"; //impostiamo l'indirizzo email a cui rispondere
$intestazioni .= "MIME-Version: 1.0\r\n";
$intestazioni .= "Content-type: text/html; charset=iso-8859-1\r\n"; /*impostiamo il formato
della mail in HTML*/
$corpo_messaggio = $testo;
}
if(!empty($_FILES['allegato']['tmp_name'])) { //controlliamo che ci sia l'allegato o meno
allegato(); //impostiamo i parametri dell'invio della mail con l'allegato
}else{
no_allegato(); //impostiamo i parametri dell'invio dell'email senza l'allegato
}
if(@mail($email, $oggetto, $corpo_messaggio, $intestazioni)) { /*mettiamo la funzione di invio email
e controlliamo che sia stata inviata*/
$messaggio = "La mail è stata inviata con successo!"; //testo di successo dell'invio della mail
}else{
$messaggio = "Ci sono stati problemi con l'invio della mail, quini potrebbe essere non stata inviata correttamente"; /*
testo di fallimento dell'invio della mail*/
}
echo $messaggio; //facciamo sapere all'utente come è andato a finire l'invio
?>
</body>
</html>
spiegatemi i passaggi con i commenti appositi grazie
e se possibile ditemi come posso far funzionare questo script.