Form invio e-mail con allegato

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
cosa intendi con crasha ?
l'ho riprovata in locale e sino al commento
//sino a qui sembra funzionare
funzioma tutto, come detto non ho provato l'invio perche non lho caricata in remoto
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Mi appare il form con parte del codice sopra (?) e dopo pochi secondi " 404 Not Found". Come se non trovasse qualcosa.
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
No, l'avevo salvato in .html. Ora funziona però mi da errore nell'invio. "Errore di trasmissione, riprova più tardi"
Il codice che sto usando è quello che mi hai postato tu un mese fa...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
hai ragione, nel codice che ho io l'avevo corretto, ma mi ero dimenticato di segnalartelo :(
$to = $ademail;
(mi hai detto che quella è la tua email contenuta nel file che includi)
mentre in mail() ho lasciato
mail($destinatario, $funzione, $msg, $headers)
quindi correggi in
mail($to, $funzione, $msg, $headers)
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Fatto. Funziona benissimo, c'era solo un piccolo problemino, nella mail non mi usciva il mittente ma "null". Nel codice abbiamo fatto confusione tra $email e $mittente, ma sono riuscito a risolvere da solo. Adesso funziona tutto perfettamente. Grazie davvero Borgo, davvero non so come avrei fatto senza di te, grazie, grazie, grazie, grazie e ancora grazie!
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Scusa Borgo ma purtroppo c'è un altro problema ancora :(
La mail parte e tutto, quando la ricevo però non c'è il file allegato, c'è il tmp di pochi kb. Dove è l'errore?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
se hai letto l'articolo che ti ho postato e ti sei scaricato la classe ecco come potresti fare

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=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
 <?php
require_once "config2.php"; //cosa c'è in config2 ? il tuo indirizzo?
function tipi_ammessi($file){//$_FILES['allegato']['name']
    $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;
    }
}
function file_da_allegare($file_nome, $file_tmp){//$_FILES['allegato']['name'], $_FILES['allegato']['tmp_name']
	//ricavo il nome del file e del temp cone gli eventuali percorsi
	$nome_file=pathinfo($file_nome, PATHINFO_BASENAME);
	$nome_file_temp=$file_tmp;
	//rivavo il percorso temporaneo con + slash finale
	$cartella_temp=pathinfo($nome_file_temp, PATHINFO_DIRNAME);
	//e ricavo il nome del file da allegare con il suo percorso
	$da_allegare=$cartella_temp.$nome_file;
	//uploado e verifico
	if(move_uploaded_file($nome_file_temp, $da_allegare)){
		return $da_allegare;//file caricato in cartella temporanea e nome da indicare a PHPmailler
	}else{
		return FALSE;//c'è stato un errore
	}
}//fine function file da allegare
//************
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 />";
    }
    if($_FILES['allegato']['name'] !=""){//se diverso da vuoto faccio le verifiche
		if(!tipi_ammessi($_FILES['allegato']['name'])){
			$errori.= "il formato dell'allegato non è ammesso<br />";
		}else{//se è ammesso lo carico nella cartella temporanea
			$da_allegare=file_da_allegare($_FILES['allegato']['name'], $_FILES['allegato']['tmp_name']);
			if($da_allegare== false){
				$errori.= "c'è stato un errore nel caricamento del file, riprova più tardi<br />";
			}
		}
	}else{
		$da_allegare="";//comunque lo vuoto
	}
	//$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 D.lgs. 196/03";
    }
    if($errori != ""){
        echo $errori;
    }else{
        //ho messo la cartella della classe nello stessa cartella dove c'è il form (altrimenti devi modificare il percorso)
		require_once "phpmailler/class.phpmailer.php";//richiamo la classe
		$mail = new PHPmailer();//e inizio a ad instanziarla
		$mail->SetLanguage('it','language/');
		$mail->IsHTML(true); // invio l'email in formato HTML
		$mail->Subject="invio curriculum: $funzione";
		$mail->AddAddress("[email protected]");//qui devi mettere la tua email o se è dal config devi mettere $to
		$mail->AddReplyTo($email,"");//per rispondere
		//preparo il messaggio da inviare
		//volendo puoi mettere una <table> e/o vari tag per cambuare colori
		$testo="<hr>email inviata il ".date("d m Y H:i:s")."<br>"
		$testo .="mittente $email<hr>";
		$testo .=nl2br($messaggio)."<hr>";//trasformo eventuali \n \r in <br>
		$testo .= $check."<hr>";
		if($da_allegare !=""){
			$testo .="allegato ".$da_allegare."<hr>";
			$mail->AddAttachment($allegare);
		}else{
			$testo .="allegato non inviato<hr>";
		}
		$mail->Body=$testo;
        if($mail->Send()){
            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>

p.s.
verifica posso aver fatto degli errori in quanto buttato giù di corsa integrando quello che ho nel mio form contatti e il tuo
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Grazie borgo. Ho scaricato ed installato PHPMailer così come mi dice la guida. Ho inserito il "require" nel codice e ho caricato il tutto però non funziona.
Mi dice che c'è un errore qui:
PHP:
$testo .="mittente $email<hr>";
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Ora va, ma l'email non parte "c'è stato un errore nel caricamento del file, riprova più tardi" :confused:
Ho provato a dare un'occhiata per capire dove è l'errore, ma per quanto ne sappia è tutto a posto :confused:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
nella function file_da_allegare cerca la riga
PHP:
$da_allegare=$cartella_temp.$nome_file;
e correggila con
PHP:
$da_allegare=$cartella_temp."/".$nome_file;

poi mi sai dire
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Questo è il codice che sto usando:

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=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
 <?php
function tipi_ammessi($file){//$_FILES['allegato']['name']
    $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;
    }
}
function file_da_allegare($file_nome, $file_tmp){//$_FILES['allegato']['name'], $_FILES['allegato']['tmp_name']
    //ricavo il nome del file e del temp cone gli eventuali percorsi
    $nome_file=pathinfo($file_nome, PATHINFO_BASENAME);
    $nome_file_temp=$file_tmp;
    //rivavo il percorso temporaneo con + slash finale
    $cartella_temp=pathinfo($nome_file_temp, PATHINFO_DIRNAME);
    //e ricavo il nome del file da allegare con il suo percorso
    $da_allegare=$cartella_temp.$nome_file;
    //uploado e verifico
    if(move_uploaded_file($nome_file_temp, $da_allegare)){
        return $da_allegare;//file caricato in cartella temporanea e nome da indicare a PHPmailler
    }else{
        return FALSE;//c'è stato un errore
    }
}//fine function file da allegare
//************
if(isset($_POST['Invia'])){
    //$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 />";
    }
    if($_FILES['allegato']['name'] !=""){//se diverso da vuoto faccio le verifiche
        if(!tipi_ammessi($_FILES['allegato']['name'])){
            $errori.= "il formato dell'allegato non è ammesso<br />";
        }else{//se è ammesso lo carico nella cartella temporanea
            $da_allegare=file_da_allegare($_FILES['allegato']['name'], $_FILES['allegato']['tmp_name']);
            if($da_allegare== false){
                $errori.= "c'è stato un errore nel caricamento del file, riprova più tardi<br />";
            }
        }
    }else{
        $da_allegare="";//comunque lo vuoto
    }
    //$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 D.lgs. 196/03";
    }
    if($errori != ""){
        echo $errori;
    }else{
        //ho messo la cartella della classe nello stessa cartella dove c'è il form (altrimenti devi modificare il percorso)
        require_once "PHPMailer/class.phpmailer.php";//richiamo la classe
        $mail = new PHPmailer();//e inizio a ad instanziarla
        $mail->SetLanguage('it','language/');
        $mail->IsHTML(true); // invio l'email in formato HTML
        $mail->Subject="invio curriculum: $funzione";
        $mail->AddAddress("[email protected]");//qui devi mettere la tua email o se è dal config devi mettere $to
        $mail->AddReplyTo($email,"");//per rispondere
        //preparo il messaggio da inviare
        //volendo puoi mettere una <table> e/o vari tag per cambuare colori
        $testo="<hr>email inviata il ".date("d m Y H:i:s")."<br>";
        $testo .="mittente $email<hr>";
        $testo .=nl2br($messaggio)."<hr>";//trasformo eventuali \n \r in <br>
        $testo .= $check."<hr>";
        if($da_allegare !=""){
            $testo .="allegato ".$da_allegare."<hr>";
            $mail->AddAttachment($allegare);
        }else{
            $testo .="allegato non inviato<hr>";
        }
        $mail->Body=$testo;
        if($mail->Send()){
            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>
 

el_diablo92

Utente Attivo
17 Dic 2012
31
0
6
Fatto, ma niente.
La mail parte e arriva, ma è senza allegato, inoltre mi da come messaggio " Impossibile accedere al file: Messaggio inviato.... "
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
pensavo di poter abbreviare
sempre nella function file_da_allegare sostituisci
PHP:
    //e ricavo il nome del file da allegare con il suo percorso
    $da_allegare=$cartella_temp."/".$nome_file;
    //uploado e verifico
con
PHP:
    //e ricavo il nome del file da allegare con il suo percorso
    if (strpos($cartella_temp, '/') !== false){
		$cartella_temp.= "/";
	}else{
		$cartella_temp.= "\\";
	}
	$da_allegare=$cartella_temp.$nome_file;
    //uploado e verifico

è quello che uso io nel mio form e funzia

p.s.
ho provato il resto (escluso l'invio perche sto lavorando il locale) e sembrerebbe funzionare tutto

edit
mal che vada provo a coricarlo
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
U PHP bottone per invio mail o ritorno al form PHP 15
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
paloppa [PHP] Invio mail da form dubbio PHP 17
F Form mail php errore invio PHP 5
I form invio mail HTML e CSS 1
Francesco Polese Errore form invio mail+php PHP 22
P invio mail da form con dati php PHP 7
W Estrapolare un indirizzo mail di un form durante l'invio PHP 5
I invio mail da form PHP 1
S Form invio mail html, con invio tramite file denominato invio.php PHP 8
Il Matta Problema Form e invio mail PHP 2
B Problema form mail per invio doppio allegato PHP 1
A Problema orario invio mail per form PHP 4
S php form invio mail PHP 3
L Form con invio mail PHP 1
E Form invio e-mail con allegato PHP 0
N Form invio Mail con Allegato PHP 2
C problema invio mail con form php PHP 0
T form per invio mail PHP 38
R [Flash] redirect dopo invio form mail Flash 4
S form invio mail con foto o logo PHP 46
P Form per invio mail PHP 27
G Invio Dati Form ad E-Mail PHP 1
P aggiunta modulo invio allegati a form mail PHP 15
S Problema invio mail da form Classic ASP 6
Z form invio mail, scelta destinatari PHP 0
S form invio mail con opzioni PHP 3
B Invio tramite form mail di più allegati PHP 0
T Invio mail da form contatti con annesso file attachment Classic ASP 1
L Problemi con invio form via mail Classic ASP 3
F script asp invio mail con dati di un form Classic ASP 3
S problemi invio dati da un form a e.mail HTML e CSS 1
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
S Invio email da form PHP 8
A [PHP] Invio automatico dati da form PHP 6
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
R [javascript]Form invio preventivo Javascript 0
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
S Problema invio form php/html PHP 3
Samuele Ronzani [PHP] Validazione e invio campi form. PHP 7
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
Marco_88 Passare un valore prima dell'invio del form Ajax 0
P PHP mailer invio form con 2 allegati. PHP 3
G Form invio multiplo da database PHP 0
C Come posso integrare il bottone "paga adesso" di paypal e un form php per invio dati? PHP 1
W Modifica su invio dati da form PHP 4
N impedire invio dati form jQuery 3
P Caricare nuova pagina dopo invio dati form Javascript 11
P invio form non corretto dopo controllo dati PHP 8

Discussioni simili