Form invio e-mail con allegato

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
 
Mi appare il form con parte del codice sopra (?) e dopo pochi secondi " 404 Not Found". Come se non trovasse qualcosa.
 
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...
 
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)
 
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!
 
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?
 
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
 
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>";
 
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:
 
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
 
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>
 
Fatto, ma niente.
La mail parte e arriva, ma è senza allegato, inoltre mi da come messaggio " Impossibile accedere al file: Messaggio inviato.... "
 
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