Form invio e-mail con allegato

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Salve a tutti. Avevo, ed ho ancora, bisogno di un form che mi faccia arrivare su una data casella di posta un e-mail con un allegato.
Googlando ho trovato questo vostro tutorial. Era perfetto fino a che non mi sono scontrato con alcune modifiche per me necessarie da apportare. Premetto che sono un neofita del php, so giusto 4-5 cose base.

Ebbene questo è il codice da me modificato
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form action="Untitled-3.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="destinatario" value="mia_mail@mio_dominio.it">
<table border="0">
<tr>
  <td>Email:</td>
  <td><input type="text" name="mittente" value="" /></td>
</tr>
<tr>
  <td>Funzione:</td>
  
  <td>
  <input type="hidden" name="funzione" value="">
  <select name="funzione"> 
 
<option selected value="funzione"></option> 
<option value="Agente di commercio">Agente di commercio</option>
<option value="Procacciatore">Procacciatore</option> 

</select></td>
</tr>
<tr>
  <td>Messaggio:</td>
  <td><textarea cols="20" rows="4" name="messaggio"></textarea></td>
  </tr>
<tr>
  <td>Allega il tuo CV:</td>
  <td><input type="file" name="allegato" /></td>
</tr>
<tr>
  <td colspan="2"><center>Formati consentiti: .doc e .pdf<br />
  <div style="float: left; margin-left: 20px;"><input type="checkbox" name="check" /></div><div style="float: right; font-size: 10px; margin-top: 4px; margin-right: 15px;">Autorizzo il trattamento dei dati personali ai sensi del D. lgs. 196/03</div><br /></center>
  <center><input type="submit" value="Invia" /></center></td>
</tr>
</table>
</form>
</body>
</html>
PHP:
<?php
// Recupero il valore dei campi del form
$destinatario = $_POST['destinatario'];
$mittente = $_POST['mittente'];
$funzione = $_POST['funzione'];
$messaggio = $_POST['messaggio'];
$check = $_POST['check'];

// 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
$send = mail($destinatario, $funzione, $msg, $headers, $check);
if ($send)
{
  echo "<p>Mail inviata con successo!</p>";
}else{
  echo "<p>Errore!</p>";
}
?>


La questione è molto semplice, ho bisogno di un form dove le persone possano inviarmi i loro curriculum.
Rispetto al codice iniziale ho apportato alcune modifiche come la possibilità di scegliere il ruolo che a me compare come oggetto della mail. E una piccola casella da spuntare per il trattamento dei dati personali.
Ci sono però alcuni problemi. Il primo è che anche se manca qualche campo o se la casella non è spuntata l'email parte e arriva comunque. Il secondo e ancora più importate non riesco ad applicare la restrizione per la tipologia di file. Ho cercato a lungo per il web, ma niente che potessi applicare o che funzionasse in questo codice.
Dopo giorni di ricerche a vuoto ho deciso di rivolgermi a voi. Spero di risolvere questa cosa.
Grazie in anticipo.
Alessio.
 
ciao
io uso questa funzione
PHP:
<?php
function tipi_ammessi($file){//$_FILES['allegato']['name'])
	//elenco in array i tipi ammessi
	$tipo=array('jpg', 'JPG','gif','png');//qui puoi mettere doc, pdf txt
	//ricavo il nome del file
	$file=pathinfo($file, PATHINFO_BASENAME);
	//ricavo l'estensione del file
	$estensione=pathinfo($file, PATHINFO_EXTENSION); 
	//verifico che l'estensione sia tra i tipi ammessi
	if(in_array($estensione,$tipo)){
		return TRUE;//l'estensione è consentita
	}else{
		return FALSE;//file con estensione non consentita
	}
}//fine function verifica tipi di file
//........
if(tipi_ammessi($_FILES['allegato']['name'])){
	//faccio quello che deo fare upload ecc..
}else{
	//messaggio di errore di file non ammesso
}

?>

p.s.
abbandona la funzione mail() e studiati la classe phpmailer avrai meno problemi con l'invio e con gli allegati
 
Grazie Borgo.
Questo postato da te posso integrarlo con quello da me postato o mi consigli di trovare un'altra soluzione?
 
ciao
puoi integrarlo, l'importante è che blocchi file indesiderati (es .exe), cioè se il file non è tra quelli ammessi l'email NON deve partire
 
Bene, bene. Lo devo inserire prima dell' "is_uploaded_file", giusto?
Per quanto riguarda il problema dell'invio anche con campi vuoti solo phpmailer me lo può risolvere?
E grazie mille ancora!
 
ciao
phpmailer non risolve i problemi dei campi vuoti, ma facilita che le email arrivino, cosa che con mail() non sempre succede, soprattutto se devi inviare una email di conferma.
per i campi vuoti e la loro validazione devi fare aggiungere righe di codice.
è sempre importante validare i vari campi che arrivano dal form, perche eventuali rogne non ti arrivano solo dai file, ma possono arrivare anche da campi di testo in cui il malentenzionato inserisce del codice

edit
togli questa
<input type="hidden" name="destinatario" value="mia_mail@mio_dominio.it">
eviti di avere spam, il tuo indirizzo mettilo nella parte php
 
Ultima modifica:
Di togliere quella parte ne avevo già intenzione. Altrove dove non ho bisongno di ricevere allegati ho usato "MailMe" (che come hai suggerito tu riporta l'indirizzo altrove) e mi sono trovato benissimo.
Un'ultima cosa: per un neofita del php come me, onde evitare di fare danni, cosa consigli di fare per una soluzione a breve termine? Diciamo "mettere una pezza" nel frattempo che inizio a studiare il linguaggio, perché a quanto pare non ci posso mettere le mani vicino così facilmente. Tralaltro ho provato a capirci qualcosa di phpmailer ma mi sembra arabo, quindi urge studiare!
 
ciao
puoi usare un solo form baste non mettere l'allegato obbligatorio
se hai pazienza ti posto un schema di come faccio io i controlli.
per ora usa mail() poi vedrai che studiata un po' phpmailer è molto, ma molto più comoda
 
ciao
ecco uno schema di come faccio io, prova ad adattaretelo e nel dubbio chiedi (leggi i commenti)
PHP:
<?php
//qui all'inizio scrivo le varie funzioni che usero per le verifiche
//guarda che non sto a srivere tutto il codice
function tipi_ammessi($file){
 //................
}
//altre funzioni se servono
//per prima cosa devi decidere quali sono i dati obbligatori e quelli facoltativi
//se quelli obbligatori sono errati o non inseriti blocchi l'invio e troni al form
/*nota: con mittente intendi l'indirizzo email del mittente? o il nome del mittente?
se è il nome è importante che tu aggiunga un campo di input richiedendo l'indirizzo email
io ti metto tra i $_POST l'indirizzo email, tu lo aggiungerai poi nel form*/
/*
$mittente = htmlspecialchars(trim($_POST['mittente']));//facoltativo
$email = htmlspecialchars(trim($_POST['email']));//obbligatorio
$funzione = trim($_POST['funzione']);//facoltativo nel form ti converrebbe mettere <optio value""> -- seleziona -- </option>
$messaggio = trim(strip_tags($_POST['messaggio']));//facoltativo ? se iobbligatorio numero minimo di caratteri
$check = $_POST['check'];//obbligatorio
$allegato = $_FILES['allegato']['tmp_name'];//facoltativo
*/
//per prima cosa metto a vuoto una variabile, poi inizio i controlli
$errori="";
$mittente = htmlspecialchars(trim($_POST['mittente']));
if(filter_var(htmlspecialchars(trim($_POST['email'])), FILTER_VALIDATE_EMAIL)){
	$email=htmlspecialchars(trim($_POST['email']));
}else{
	$errori.="indirizzo email non valido<br />";
}
if(!isset($_POST['check'])){
	$errori.="non hai dato il consenso per il trattamento dei dati<br />";
}
if($_FILES['allegato']['tmp_name'] !=""){//è stato inserito un allegato
	//quindi lo controllo
	if(tipi_ammessi($_FILES['allegato']['name'])){
		if (!is_uploaded_file($_FILES['allegato']['tmp_name'])){
			$errori.="errore di caricamento, riprova<br />";
		}
	}else{
		$errori.="tipo di allegato non ammesso<br />";
	}
}
//a questo punto ho verificato gli errori sui dati obbligatori
if($errori != ""){// se la variabile non è vuota c'è almeno un errore
	//visualizzo gli errori
	echo $errori;
}else{
	//e qui metti tutta parte che hai messo per l'invio (non la verifica del uploda perchè gia fatta)
	// Creo 2 variabili che riempirò più avanti...
	$headers = "From: " . $mittente;
	$msg = "";
	$file = fopen($allegato,'rb');
	$data = fread($file, filesize($allegato));
	fclose($file);
	//.........
	if(mail($destinatario, $funzione, $msg, $headers)){
		echo "messaggio inviato....";
	}else{
		echo "errore di trasmissione, riprova più tardi";
	}
}
//lascio il tempo all'utente di leggere i messaggi e trorno alla pag del form
echo "<meta http-equiv='Refresh' content='4; URL=nome_pag_form.php'>";
?>
poi come detto guardati phpmailer
p.s.
conviene sempre dare un name al submit
<input type="submit" name "invia" value="Invia" />
 
Grazie mille borgo.
Con mittente intendo l'indirizzo, pensavo che visto che il form mi serviva per ricevere curriculum, l'inserimento del form fosse superfluo, e quindi per snellire un po' l'ho eliminato.
Dunque se ho capito bene il nuovo codice dovrebbe essere questo
PHP:
 <?php
function tipi_ammessi($file){
}

$email = htmlspecialchars(trim($_POST['email']));
$funzione = trim($_POST['funzione']);
$messaggio = trim(strip_tags($_POST['messaggio']));
$check = $_POST['check'];

$allegato = $_FILES['allegato']['tmp_name'];

$errori="";
$mittente = htmlspecialchars(trim($_POST['mittente']));
if(filter_var(htmlspecialchars(trim($_POST['email'])), FILTER_VALIDATE_EMAIL)){
    $email=htmlspecialchars(trim($_POST['email']));
}else{
    $errori.="indirizzo email non valido<br />";
}
if(!isset($_POST['check'])){
    $errori.="non hai dato il consenso per il trattamento dei dati<br />";
}
if($_FILES['allegato']['tmp_name'] !=""){
    if(tipi_ammessi($_FILES['allegato']['name'])){
        if (!is_uploaded_file($_FILES['allegato']['tmp_name'])){
            $errori.="errore di caricamento, riprova<br />";
        }
    }else{
        $errori.="tipo di allegato non ammesso<br />";
    }
}
if($errori != ""){
    echo $errori;
}else{
    $headers = "From: " . $mittente;
    $msg = "";
    $file = fopen($allegato,'rb');
    $data = fread($file, filesize($allegato));
    fclose($file);
	$data = chunk_split(base64_encode($data));
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    $headers .= "\nMIME-Version: 1.0\n";
	$headers .= "Content-Type: multipart/mixed;\n";
	$headers .= " boundary=\"{$mime_boundary}\"";
	$msg .= "This is a multi-part message in MIME format.\n\n";
	$msg .= "--{$mime_boundary}\n";
	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
	$msg .= "Content-Transfer-Encoding: 7bit\n\n";
	$msg .= $messaggio . "\n\n";
	$msg .= "--{$mime_boundary}\n";
	$msg .= "Content-Disposition: attachment;\n";
	$msg .= " filename=\"{$allegato_name}\"\n";
	$msg .= "Content-Transfer-Encoding: base64\n\n";
	$msg .= $data . "\n\n";
	$msg .= "--{$mime_boundary}--\n";
}
    if(mail($destinatario, $funzione, $msg, $headers)){
        echo "messaggio inviato....";
    }else{
        echo "errore di trasmissione, riprova più tardi";
    }
echo "<meta http-equiv='Refresh' content='4; URL=nome_pag_form.php'>";
?>

Correggimi se sbaglio.
Grazie, grazie, grazie e grazie ancora!
 
Ultima modifica:
ciao
così a prima vista sembrerebbe ok (salvo che dentro la funzione tipi_ammessi non c'è il codice, ma forse non l'hai messo per semplificare)
comunque il metodo migliore è provarlo e postare gli eventuali (probabili :)) errori

edit
una cosa
$email=htmlspecialchars(trim($_POST['email']));
non ti serve così perche se è valida è giusta
$email=($_POST['email'];
anche nell'if, se c'è qualche porcheria non te la valida
 
Ultima modifica:
Ho provato, ma non va...

I codici sono questi, dov'è che sbaglio? :confused::confused:
PHP:
<?php
include("config2.php");
function tipi_ammessi($file){
    $tipo=array('jpg', 'JPG','gif','png');
    $file=pathinfo($file, PATHINFO_BASENAME);
    $estensione=pathinfo($file, PATHINFO_EXTENSION); 
    if(in_array($estensione,$tipo)){
        return TRUE;
    }else{
        return FALSE;
    }
}

$to = $ademail;
$email = $_POST['mittente'];
$funzione = trim($_POST['funzione']);
$messaggio = trim(strip_tags($_POST['messaggio']));
$check = $_POST['check'];

$allegato = $_FILES['allegato']['tmp_name'];

$errori="";
$mittente = $_POST['mittente'];
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
    $email = $_POST['email'];
}else{
    $errori.="Indirizzo email non valido<br />";
}
if(!isset($_POST['check'])){
    $errori.="Non hai dato il consenso per il trattamento dei dati<br />";
}
if($_FILES['allegato']['tmp_name'] !=""){
    if(tipi_ammessi($_FILES['allegato']['name'])){
        if (!is_uploaded_file($_FILES['allegato']['tmp_name'])){
            $errori.="Errore di caricamento, riprova<br />";
        }
    }else{
        $errori.="Tipo di allegato non ammesso<br />";
    }
}
if($errori != ""){
    echo $errori;
}else{
    $headers = "From: " . $mittente;
    $msg = "";
    $file = fopen($allegato,'rb');
    $data = fread($file, filesize($allegato));
    fclose($file);
	$data = chunk_split(base64_encode($data));
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    $headers .= "\nMIME-Version: 1.0\n";
	$headers .= "Content-Type: multipart/mixed;\n";
	$headers .= " boundary=\"{$mime_boundary}\"";
	$msg .= "This is a multi-part message in MIME format.\n\n";
	$msg .= "--{$mime_boundary}\n";
	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
	$msg .= "Content-Transfer-Encoding: 7bit\n\n";
	$msg .= $messaggio . "\n\n";
	$msg .= "--{$mime_boundary}\n";
	$msg .= "Content-Disposition: attachment;\n";
	$msg .= " filename=\"{$allegato_name}\"\n";
	$msg .= "Content-Transfer-Encoding: base64\n\n";
	$msg .= $data . "\n\n";
	$msg .= "--{$mime_boundary}--\n";
}
    if(mail($destinatario, $funzione, $msg, $headers)){
        echo "Messaggio inviato....";
    }else{
        echo "Errore di trasmissione, riprova più tardi";
    }
echo "<meta http-equiv='Refresh' content='4; URL=Untitled-4.html'>";
?>

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<form action="Untitled-2.php" method="POST" enctype="multipart/form-data">
<table border="0">
<tr>
  <td>Email:</td>
  <td><input type="text" name="email" value="" /></td>
</tr>
<tr>
  <td>Funzione:</td>
  
  <td>
  <input type="hidden" name="funzione" value="">
  <select name="funzione"> 
 
<option selected value="funzione"> -- Seleziona -- </option> 
<option value="Agente di commercio">Agente di commercio</option>
<option value="Procacciatore">Procacciatore</option> 

</select></td>
</tr>
<tr>
  <td>Messaggio:</td>
  <td><textarea cols="20" rows="4" name="messaggio"></textarea></td>
  </tr>
<tr>
  <td>Allega il tuo CV:</td>
  <td><input type="file" name="allegato" /></td>
</tr>
<tr>
  <td colspan="2"><center>Formati consentiti: .doc e .pdf<br />
  <div style="float: left; margin-left: 20px;"><input type="checkbox" name="check" /></div><div style="float: right; font-size: 10px; margin-top: 4px; margin-right: 15px;">Autorizzo il trattamento dei dati personali ai sensi del D. lgs. 196/03</div><br /></center>
  <center><input type="submit" value="Invia" name="Invia" /></center></td>
</tr>
</table>
</form>
</body>
</html>

Edit: non fare caso all'estensione scelta nel codice, giusto per provare ho lasciato quelli messi da te. Il fatto è che l'email non parte proprio :/
 
Scusa, scusa, errore mio, ho distrattamente confuso 'email' e 'mittente'

i codici ora sono questi
PHP:
<?php
function tipi_ammessi($file){
    $tipo=array('jpg', 'JPG','gif','png');
    $file=pathinfo($file, PATHINFO_BASENAME);
    $estensione=pathinfo($file, PATHINFO_EXTENSION); 
    if(in_array($estensione,$tipo)){
        return TRUE;
    }else{
        return FALSE;
    }
}

$to = "[email protected]";
$mittente = $_POST['mittente'];
$funzione = trim($_POST['funzione']);
$messaggio = trim(strip_tags($_POST['messaggio']));
$check = $_POST['check'];

$allegato = $_FILES['allegato']['tmp_name'];

$errori="";
if(filter_var($_POST['mittente'], FILTER_VALIDATE_EMAIL)){
    $mittente = $_POST['mittente'];
}else{
    $errori.="Indirizzo email non valido<br />";
}
if(!isset($_POST['check'])){
    $errori.="Non hai dato il consenso per il trattamento dei dati<br />";
}
if($_FILES['allegato']['tmp_name'] !=""){
    if(tipi_ammessi($_FILES['allegato']['name'])){
        if (!is_uploaded_file($_FILES['allegato']['tmp_name'])){
            $errori.="Errore di caricamento, riprova<br />";
        }
    }else{
        $errori.="Tipo di allegato non ammesso<br />";
    }
}
if($errori != ""){
    echo $errori;
}else{
    $headers = "From: " . $mittente;
    $msg = "";
    $file = fopen($allegato,'rb');
    $data = fread($file, filesize($allegato));
    fclose($file);
	$data = chunk_split(base64_encode($data));
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    $headers .= "\nMIME-Version: 1.0\n";
	$headers .= "Content-Type: multipart/mixed;\n";
	$headers .= " boundary=\"{$mime_boundary}\"";
	$msg .= "This is a multi-part message in MIME format.\n\n";
	$msg .= "--{$mime_boundary}\n";
	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
	$msg .= "Content-Transfer-Encoding: 7bit\n\n";
	$msg .= $messaggio . "\n\n";
	$msg .= "--{$mime_boundary}\n";
	$msg .= "Content-Disposition: attachment;\n";
	$msg .= " filename=\"{$allegato_name}\"\n";
	$msg .= "Content-Transfer-Encoding: base64\n\n";
	$msg .= $data . "\n\n";
	$msg .= "--{$mime_boundary}--\n";
}
    if(mail($funzione, $msg, $headers)){
        echo "Messaggio inviato....";
    }else{
        echo "Errore di trasmissione, riprova più tardi";
    }
echo "<meta http-equiv='Refresh' content='4; URL=Untitled-4.html'>";
?>

Il form funge e tutto solo che l'e-mail non arriva, cosa c'è che non va?
 
ciao
una cosa che mi è saltata subito all'occhio nel form

<td>
<input type="hidden" name="funzione" value="">
<select name="funzione">

<option selected value="funzione"> -- Seleziona -- </option>
<option value="Agente di commercio">Agente di commercio</option>
<option value="Procacciatore">Procacciatore</option>

</select></td>
tu metti due input con lo stesso nome, quandioriceve come fa a distinguerli, senza contare: a che ti serve il campo hidden?
nella select il primo option deve essre vuoto altrimenti ti trasmette (se uno no seleziona) il valore "funzione" visto anche che hai messo anche il selectedn
HTML:
 <td>
<select name="funzione"> 
<option value=""> -- Seleziona -- </option> 
<option value="Agente di commercio">Agente di commercio</option>
<option value="Procacciatore">Procacciatore</option> 
</select></td>

poi nel php se lo vuoi rendere obbligatorio metti
PHP:
<?php
//....
if($_POST['funzione'] == ""){
	$errori.="non hai selezionato la funzione<br />";
}
//....
?>
poi domani se non sono troppoi incasinato ci do un occhio meglio
 
La voce hidden l'ho messa perché così mi appare come oggetto della mail, e sinceramente non so neanche come, fatto sta che senza non risulta da nessuna parte. O almeno col vecchio codice senza il tuo aiuto così era.
Per quanto riguarda il select errore mio, ancora non l'avevo candellato il selected quando l'ho postato, ci avevo già fatto caso.
 
ciao
ho messo un po' a posto e fino ad un certo punto funziona, non so se spedisce perche non l'ho caricata.
prova la pagina così come è, per comodità ho fatto una pagina unica, che tra l'altro è meglio).
poi
se dopo ti serve divisa ti dico come fare, iloltre (penso dopo natale) ti faccio lo script usando phpmailer così eviti tutto quel cas..no di codice.
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
 <?php
require_once "config2.php"; //cosa c'è in config2 ? il tuo indirizzo?
function tipi_ammessi($file){
    $tipo=array('doc', 'pdf','txt');//aggiunto txt per fare delle prove
	//guarda che .doc vale per vecchi word devi aggiungere la nuova estenzione che mi sembra sia docx, verifica
    $file=pathinfo($file, PATHINFO_BASENAME);
    $estensione=pathinfo($file, PATHINFO_EXTENSION); 
    if(in_array($estensione,$tipo)){
        return TRUE;
    }else{
        return FALSE;
    }
}
if(isset($_POST['Invia'])){
	$to = $ademail;//e questa da dove viene? è nel config2.php? è il tuo indirizzo?
	//$email = $_POST['mittente'];
	$funzione = trim($_POST['funzione']);//queto sarebbe l'oggetto dell'email
	if($funzione==""){$funzione="funzione non indicata";}
	$messaggio = trim(strip_tags($_POST['messaggio']));//questo lo metteri obbligatorio con un minimo di caratteri
	$errori="";
	if(strlen($messaggio) < 10){//se è meno di 10 caratteri
		$errori.= "Non hai scritto il mesaggio o troppo corto<br />";
	}
	//$check = $_POST['check'];
	//$allegato = $_FILES['allegato']['tmp_name'];//lo usi dopo l verifica
	//$mittente = $_POST['mittente'];
	if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
    	$email = $_POST['email'];
	}else{
    	$errori.="Indirizzo email non valido<br />";
	}
	if(!isset($_POST['check'])){
    	$errori.="Non hai dato il consenso per il trattamento dei dati<br />";
	}else{
		//questo aggiungilo in coda con $msg .= $check;
		$check = "autorizzo il trattamento dei dati a norma del (non mi ricordo la norma)";
	}
	$allegato_name ="";//per evitare che dopo cerchi di aprire il file che non c'è
	if($_FILES['allegato']['tmp_name'] !=""){
		if(tipi_ammessi($_FILES['allegato']['name'])){
        	$allegato = $_FILES['allegato']['tmp_name'];
			$allegato_name = $_FILES['allegato']['name'];
			if (!is_uploaded_file($_FILES['allegato']['tmp_name'])){
            	$errori.="Errore di caricamento, riprova<br />";
        	}
    	}else{
        	$errori.="Tipo di allegato non ammesso<br />";
    	}
	}
	if($errori != ""){
    	echo $errori;
	}else{
    	$headers = "From: " . $mittente;
    	$msg = "";
		if($allegato_name !=""){//se l'allegato non c'e ti da errore per quello messo l'if
    		$file = fopen($allegato,'rb');
    		$data = fread($file, filesize($allegato));
    		fclose($file);
    		$data = chunk_split(base64_encode($data));
		}
    	$semi_rand = md5(time());
    	$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    	$headers .= "\nMIME-Version: 1.0\n";
    	$headers .= "Content-Type: multipart/mixed;\n";
    	$headers .= " boundary=\"{$mime_boundary}\"";
    	$msg .= "This is a multi-part message in MIME format.\n\n";
    	$msg .= "--{$mime_boundary}\n";
    	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
    	$msg .= "Content-Transfer-Encoding: 7bit\n\n";
    	$msg .= $messaggio . "\n\n";
    	$msg .= "--{$mime_boundary}\n";
    	$msg .= "Content-Disposition: attachment;\n";
    	$msg .= " filename=\"{$allegato_name}\"\n";//da dove salta fuori $allegato_name?
    	$msg .= "Content-Transfer-Encoding: base64\n\n";
    	$msg .= $data . "\n\n";
    	$msg .= "--{$mime_boundary}--\n";
		//sino a qui sembra funzionare
		if(mail($destinatario, $funzione, $msg, $headers)){
        	echo "Messaggio inviato....";
    	}else{
        	echo "Errore di trasmissione, riprova più tardi";
   	 	}
	 }
	echo "<meta http-equiv='Refresh' content='4; URL=".$_SERVER['PHP_SELF']."'>";
}else{
?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
<table border="0">
<tr>
  <td>Email:</td>
  <td><input type="text" name="email" value="" /></td>
</tr>
<tr>
  <td>Funzione:</td>
  <td>
  <select name="funzione"> 
<option  value=""> -- Seleziona -- </option> 
<option value="Agente di commercio">Agente di commercio</option>
<option value="Procacciatore">Procacciatore</option> 
</select></td>
</tr>
<tr>
  <td>Messaggio:</td>
  <td><textarea cols="20" rows="4" name="messaggio"></textarea></td>
  </tr>
<tr>
  <td>Allega il tuo CV:</td>
  <td><input type="file" name="allegato" /></td>
</tr>
<tr>
  <td colspan="2"><center>Formati consentiti: .doc e .pdf<br />
  <div style="float: left; margin-left: 20px;"><input type="checkbox" name="check" /></div><div style="float: right; font-size: 10px; margin-top: 4px; margin-right: 15px;">Autorizzo il trattamento dei dati personali ai sensi del D. lgs. 196/03</div><br /></center>
  <center><input type="submit" value="Invia" name="Invia" /></center></td>
</tr>
</table>
</form>
<?php
}
?>
</body>
</html>
quando l'hai provato fammi sapere
 
Ho provato il codice che mi hai dato borgo ma non va, crasha dopo pochi secondi.
Comunque sì config2.php è il file dove c'è la mail e la voce "ademail" è il richiamo a quello che c'è scritto del file di configurazione.
 

Discussioni simili