• User Newbie

    Invio mail con invio allegati (più file csv)

    Buonasera e grazie a tutti per la vostra disponibilità. Volevo chiedere un aiuto, se era possibile. Io devo inviare, partendo da un form abbastanza semplice, una mail che al suo interno abbia in allegato un file csv (che rappresenterà i corpo della mail) e almeno un paio di immagini o file di altro genere in allegato. Ho trovato on line un codice che fa la prima parte del lavoro che mi necessita, cioè prende i dati dal form e crea l'allegato in csv. Ho provato in diversi modi anche ad aggiungere del codice php per far si che si possano inviare anche gli altri allegati ma non sono stato capace. Posto qua il codice che ho utilizzato per l'invio della mail con l'allegato csv, che funziona bene:

     <?php
    
    $email=$_REQUEST['email'];
    $firstName=$_REQUEST['firstName'];
    $lastName=$_REQUEST['lastName'];
    
    $to = "[email protected]";
    
    
    $subject = "esempio";
    
    $message = "".
    "Email: $email" . "\n" .
    "First Name: $firstName" . "\n" .
    "Last Name: $lastName";
    
        //The Attachment
    
    $cr = "\n";
    $data = "Email" . ',' . "First Name" . ',' . "Last Name" . $cr;
    $data .= "$email" . ',' . "$firstName" . ',' . "$lastName" . $cr;
    $fp = fopen('esempio.csv','a');
    fwrite($fp,$data);
    fclose($fp);
    
    $attachments[] = Array(
       'data' => $data,
       'name' => 'esempio.csv',
       'type' => 'application/vnd.ms-excel',
    );
    
    
        //Generate a boundary string
    
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
    
    
        //Add the headers for a file attachment
    
     
    $headers = "MIME-Version: 1.0\n" .
               "From: {$from}\n" .
                 "Cc: [email protected]\n".
               "Content-Type: multipart/mixed;\n" .
               " boundary=\"{$mime_boundary}\"";
    
    
        //Add a multipart boundary above the plain message
    
     
    $message = "This is a multi-part message in MIME format.\n\n" .
              "--{$mime_boundary}\n" .
              "Content-Type: text/html; charset=\"iso-8859-1\"\n" .
              "Content-Transfer-Encoding: 7bit\n\n" .
              $text . "\n\n";
    
    
        //Add sttachments
    
    foreach($attachments as $attachment){
       $data = chunk_split(base64_encode($attachment['data']));
       $name = $attachment['name'];
       $type = $attachment['type'];
    
       $message .= "--{$mime_boundary}\n" .
                  "Content-Type: {$type};\n" .
                  " name=\"{$name}\"\n" .              
                  "Content-Transfer-Encoding: base64\n\n" .
                  $data . "\n\n" ;
    }
    
    
    // messaggio di controllo per i campi obbligatori
    // se lo sono tutti usare la prima
    // se lo sono solo alcuni usare la seconda
    $stringa1        = "Alcuni campi sono obbligatori!";
    #$stringa1        = "Alcuni campi sono obbligatori!";
    
    // messaggio di controllo email non valida
    $stringa2        = "Correggi la tua mail per favore";
    
    // messaggio di invio riuscito (decommentare se si usa OPZIONE1 vedi sotto)
    $stringa3        = "Mail inviata grazie. Ti risponderemo al piu' presto";
    
    if (( $firstName == "" ) || ( $email == "" ))
    
    // popup di errore sui campi obbligatori
                {
                echo "<script language=\"JavaScript\">\n";
                echo "alert(\"$stringa1\");\n";
                echo "javascript:history.go(-1);";
                echo "</script>";
                }
    
    // controllo del formato della email
        else if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))
                {
    
    // invia la email a me
                        $message .= "--{$mime_boundary}--\n";
                        mail($to, $subject, $message, $headers);
    
    
    // nelle prossime righe definisco se voglio un semplice popup che avvisa l'utente che il messaggio è stato inviato (OPZIONE1) e che lo fa ritornare automaticamente alla pagina dove ha compilato il form
    
    // OPPURE
    
    // se ridirezionarlo verso una pagina web specifica (OPZIONE2)
    
    
    // OPZIONE1:
    // popup di messaggio inviato e ritorno alla pagina precedente
    // decommentare $stringa3
    // commentare tutto se si usa OPZIONE2 (per commentare usare /* all'inizio e */ alla fine delle righe da commentare)
    
                        echo "<script language=\"JavaScript\">\n";
                        echo "alert(\"$stringa3\");\n";
                        echo "javascript:history.go(-1);";
                        echo "</script>";
                }
    
    ?> 
    
    

    Ho modificato un po' il codice ma funziona bene. Qualcuno può aiutarmi dicendomi come poter far si che i file che carico dal form html possono essere allegati alla mail assieme al csv? Grazie in anticipo
    Mario


  • User

    Gli allegati, in questo caso le immagini, sono presenti sul server? Oppure vengono selezionate nel form?

    Ricordati che i file devono essere presenti sul server per essere inviati con le email!


  • User Newbie

    Ciao e grazie per la risposta. Sono selezionate dal form li con il solito <input type="file" id="immagine" name="immagine">. Poi vorrei che partissero assieme al csv in allegato. Quindi alla fine il risultato dovrebbe essere una mail con il file csv e due o tre immagini o file vari allegati.