- Home
- Categorie
- Coding e Sistemistica
- PHP
- inviare mail con allegato
-
inviare mail con allegato
ciao avrei bisogno di un aiut.....ho un form in php da compilare che contiene oltre a svariati campi, anche la possibilità di inviare un allegato....
il punto è proprio questo, l'alegato che ricevo dalla compilazione del form non riesco ad aprirlo mi dice che è un formato file non valido, anche se è un banalissimo jpg...sapete dirmi dove sbaglio?
vi posto il codice:<?php //*********************************************************************** //modificare questi parametri a piacimento $oggetto = 'Iscrizione cavallo '; $aChi = "[EMAIL="[email protected]"][email protected][/EMAIL]"; //desctinatario $mittente = "[EMAIL="[email protected]"][email protected][/EMAIL]"; $url_ridirezione_ok = 'inoltrata.php'; //mettere pagina di destinazione in caso di successo $url_ridirezione_err = 'inoltrata.php'; //mettere pagina di destinazione in caso di errore // fine parametri //*********************************************************************** if ($_POST['submit'] != "") { $messggio .= "------------------ \n"; $messggio .= 'Dati cavallo:'."\n"; $messggio .= "------------------ \n"; $messggio .= 'Nome e cognome proprietario:'.$_POST['nomecognome']."\n"; $messggio .= 'Nome del cavallo:'.$_POST['nomecavallo']."\n"; $messggio .= 'Colore del mantello:'.$_POST."\n"; $messggio .= 'Età:'.$_POST['eta']."\n"; $messggio .= 'Razza:'.$_POST['razza']."\n"; $messggio .= 'Nazionalità:'.$_POST['naz']."\n"; $messggio .= 'Altezza:'.$_POST['altezza']."\n"; $messggio .= 'Genitori:'.$_POST['genitori']."\n"; $messggio .= 'Attività svolte dal cavallo:'.$_POST['attivita']."\n"; $messggio .= 'Telefono:'.$_POST['telefono']."\n"; $messggio .= 'E-Mail:'.$_POST['email']."\n"; $messggio .= "------------------ \n"; $messggio .= 'Descrizione: '.$_POST['note']."\n"; $oggetto = $oggetto; $messaggio = $messggio; $allegato = $_FILES['allegato']['tmp_name']; $nomeAllegato = $_FILES['allegato']['name']; if (mailAllegati($messaggio, $oggetto, $aChi, $mittente, $allegato, $nomeAllegato, "", "", "")) redirectpage($url_ridirezione_ok); //echo "Invio della email effettuato."; else redirectpage($url_ridirezione_err); echo "Invio della email fallito."; } // // FUNZIONE PER L'INVIO DI MAIL CON ALLEGATI // $mex E' IL MESSAGGIO DELL'EMAIL (CON FORMATTAZIONE HTML) // $oggetto E' L'OGGETTO // $aChi E' IL DESTINATARIO // $mittente E' IL MITTENTE // $allegato E' NOME DEL FILE CHE SI VUOLE ALLEGARE (COMPRENSIVO DI PATH) // $nomeAllegato E' IL NOME DEL FILE ALL'INTERNO DELLA MAIL // $bcc SONO I DESTINATARI DELLE COPIE CONFORMI NASCOSTE // $reply E' LA MAIL A CUI VIENE INVIATA UNA EVENTUALE RISPOSTA // LASCIARE VUOTA SE E' LA STESSA DEL MITTENTE // $stile UN'EVENTUALE BLOCCO DI STILE PER LA FORMATTAZIONE DEL MESSAGGIO // COMPRENSIVO DI <style> E </style> // function mailAllegati( $mex, $oggetto, $aChi, $mittente, $allegato, $nomeAllegato, $bcc = "", $reply = "", $stile = "") { if ( ! function_exists ( 'mime_content_type ' ) ) { function mime_content_type ( $f ) { return system ( trim( 'file -bi ' . escapeshellarg ( $f ) ) ) ; } } $filetype = mime_content_type($allegato); //$filetype="multipart/mixed"; $filez = fopen($allegato, "rb"); $contents = fread($filez, filesize($allegato)); $encoded_attach = chunk_split(base64_encode($contents)); fclose($filez); if ($reply == "") $reply = $mittente; // CREO L'INTESTAZIONE $testa = "From: $mittente\n"; if ($bcc != "") $testa .= "BCC: $bcc;\n"; $testa .= "Reply-To: $reply\n"; //$testa .= "X-Mailer: Sismail Web Email Interface\n"; $testa .= "MIME-version: 1.0\n"; $testa .= "Content-type: multipart/mixed;\n"; $testa .= " boundary=\"Message-Boundary\"\n"; $testa .= "Content-transfer-encoding: 7BIT\n"; $testa .= "X-attachments: $nomeAllegato"; // CREO IL MESSAGGIO /* $corpo = "--Message-Boundary\n"; $corpo .= "Content-type: text/html; charset=iso-8859-1\n"; $corpo .= "Content-transfer-encoding: 7BIT\n"; $corpo .= "Content-description: Mail message body\n\n"; $corpo .= "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; $corpo .= "<HTML><HEAD>"; $corpo .= "<META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">"; $corpo .= $stile; $corpo .= "</HEAD>"; $corpo .= "<BODY>"; $corpo .= $mex; $corpo .= "</BODY></HTML>"; $corpo .= "\n\n--Message-Boundary\n"; */ $corpo = "--Message-Boundary\n"; $corpo .= "Content-type: text; charset=iso-8859-1\n"; //"Content-type: text/html; charset=iso-8859-1\n"; $corpo .= "Content-transfer-encoding: 7BIT\n"; $corpo .= "Content-description: Mail message body\n\n"; $corpo .= $mex; //ALLEGATO $corpo .= "\n\n--Message-Boundary\n"; $corpo .= "Content-type: $filetype; name=\"$nomeAllegato\"\n"; $corpo .= "Content-Transfer-Encoding: BASE64\n"; $corpo .= "Content-disposition: attachment; filename=\"$nomeAllegato\"\n\n"; $corpo .= "$encoded_attach\n"; $corpo .= "--Message-Boundary--\n"; if(@mail($aChi, $oggetto, $corpo, $testa)) return true; else return false; } function redirectpage($page) { echo "<SCRIPT>"; echo "location.href ='" .$page. "'"; echo "</SCRIPT>"; } ?>
grazie in anticipo!
-
[PHP]
<?if($_POST['go']=="1") {
// Recupero il valore dei campi del form
$destinatario = "[email protected]";
$mittente = "[email protected]";
$oggetto = "oggetto mail";//raccolgo i tutti i dati del form:
foreach($_POST as $key => $value){ $MEMvalori.= "$key:\n$value\n-----------------------------------------\n\n"; }
//valorizo il messaggio
$messaggio = $MEMvalori;// Valorizzo le variabili relative all'allegato
$allegato = $_FILES['curriculum']['tmp_name'];
$allegato_type = $_FILES['curriculum']['type'];
$allegato_name = $_FILES['curriculum']['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...
$ESTENZIONE_allegato=strtolower(strrchr( $_FILES['curriculum']['name'], '.'));//controllo il tipo di file da inviare si può cancellare per tutti i file:
if($ESTENZIONE_allegato!=".doc" || !$ESTENZIONE_allegato==".rtf" || !$ESTENZIONE_allegato==".pdf" ) {
$err= "<script>alert('il formato del curriculum: $ESTENZIONE_allegato non è valido, cambiare il file da inviare\n');</script>"; }if($err!="") {
echo "$err"; }else {
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 /**/ if (mail($destinatario, $oggetto, $msg, $headers)) { //echo "<script>alert('Grazie, il suo messaggio è stato inviato.');</script>"; Header("Location:invio_confermato.html"); }else{ echo "<script>alert('Errore iprovare in un secondo momento.');</script>"; } //echo $messaggio;
}
//exit;
}?>
[/PHP]