<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>form email</title>
</head>
<body>
<?php
/*
fatta pagina unica: form + invio
se fai due pagine questa parte, da <?php a ?>, devi copiarla
nella pagina di invio
*********************************************************************************
comunque leggi anche questo articolo di max bossi
https://www.mrw.it/php/articoli/inviare-email-allegati-usando-php_497.html
da cui ho ricavato lo script per l'invio dell'allegato
*********************************************************************************
*/
if(isset($_POST['invia']) && $_POST['invia']=="invia"){//ho dato il subimt
$destinatario="mia_email@mio_dominio.com";//indirizzo da sostituire con quello che ti interessa
/* ***********************************************************************
recupero i dati testuali dal form e li pulisco da eventuale codice malevolo
qui dovresti inserire anche le verifiche sulla correttezza dei dati
e quali dati obbligatori
?non hai inserito un campo di testo per eventuali commenti?
?non hai inserito un campo per l'oggetto?
*************************************************************************** */
$link=strip_tags(trim($_POST['link']));
$email=strip_tags(trim($_POST['email']));
$pagamento=$_POST['pagamento'];
//riporto il pagamento alla descrizione
switch($pagamento){
case "payp":
$pagamento= "a mezzo paypal";
break;
case "payp":
$pagamento= "con accredito su postepay";
break;
default://non è stato selezionato la modalità di pagamento
$pagamento= "da definire";
break;
}//fine switch pagamento
$periodo=$_POST['periodo'];
//riporto il periodo alla descrizione
if($periodo !=""){
$periodo=str_replace("_"," ",$periodo);//tolgo l'undescore e rimetto lo spazio
}else{//non è stato selezionato il periodo
$periodo= "da definire";
}//fine sistemazione periodo
$oggetto="richiesta";//se inserisci il campo sostituire con $oggetto=strip_tags(trim($_POST['oggetto']));
$commenti="";//se inserisci il campo sostituire con $commenti=strip_tags(trim($_POST['commenti']));
//imposto i dati di testo
$messaggio="link: ".$link."\n";
$messaggio.="tipo di pagamento: ".$pagamento."\n";
$messaggio.="periodo: ".$periodo."\n";
$messaggio.=$commenti."\n";
// recupero le variabili relative all'allegato
$allegato = $_FILES['attachment']['tmp_name'];
$allegato_type = $_FILES['attachment']['type'];
$allegato_name = $_FILES['attachment']['name'];
/*
qui dovresti inserire la verifica del tipo di allegato e la sua grandezza
es.: sarebbe opportuno indicare che non sono ammessi file con estenzione .exe
*/
//creo 2 variabili che riempirò più avanti...
$headers = "From: " . $email;
$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{//non ho allegato
$msg = $messaggio;
}//fine if else allegato
// invio la mail
/*
al posto della funzione mail() puoi utilizzare la classe phpmailer, vedi articolo di claudio
https://www.mrw.it/php/articoli/inviare-email-classe-phpmailer_631.html
*/
if (mail($destinatario, $oggetto, $msg, $headers)){
echo "<p>Mail inviata con successo!</p>";
}else{
echo "<p>Errore ! riprova più tardi</p>";
}//fine if else invio
}//fine if submit
?>
<!--
fatta pagina unica, se vuoi fare due pagine al posto di
$_SERVER[] metti il nome della pagina a cui inviare i dati del form
e con cut/paste porta sulla nuova pagina la parte php
-->
<form method="post" enctype="multipart/form-data" action="<?php $_SEVER['PHP_SELF'] ?>">
<!--
tolto campo hidden, l'indirizzo del destinatario lo trovi nella parte php
-->
Link:
<input name="link" value="" type="text"><br>
Email:
<input name="email" value="" type="text"><br>
<br>
<!--
nelle selct devi mettere il valore da trasmettere alla selezione
-->
Pagamento:
<select name="pagamento">
<option value="payp">paypal</option>
<option value="acpp">accredito su postepay</option>
</select>
<br><br>
Periodo:
<select name="periodo">
<option value="1_mese">1 mese</option>
<option value="2_mesi">2 mesi</option>
<option value="3_mesi">3 mesi</option>
<option value="4_mesi">4 mesi</option>
<option value="5_mesi">5 mesi</option>
<option value="6_mesi">6 mesi</option>
</select>
<br><br>
Allega file:
<input name="attachment" type="file"><br>
<br>
<!--
sull pulsante submit ci vuole il nome
aggiungi il pulsante di reset, è comodo
-->
<input name="invia" type="submit" value="invia"></div>
</form>
</body>
</html>