• User Attivo

    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 &lt;style&gt; E &lt;/style&gt;
    //
    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 .= "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"&gt;";
    $corpo .= "&lt;HTML&gt;&lt;HEAD&gt;";
    $corpo .= "&lt;META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\"&gt;";
    $corpo .= $stile;
    $corpo .= "&lt;/HEAD&gt;";
    $corpo .= "&lt;BODY&gt;";
    $corpo .= $mex;
    $corpo .= "&lt;/BODY&gt;&lt;/HTML&gt;";
    $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!:ciauz:


  • User Attivo

    [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]