Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    form che invia email con più allegati

    Salve a tutti, mi chiamo Raffaele e sono un nuovo iscritto.
    Consulto spesso il vostro forum e lo trovo molto utile e solutivo.
    Questa volta, però, non sono riuscito a trovare la soluzione al mio problema, pur avendo cercato diverse discussioni in merito su questo forum
    Il mio problema è questo:
    devo creare un form che permetta di inviare un'email testuale formattata in HTML e più allegati.
    Di seguito il codice html ed il relativo php. Premetto che di PHP sono completamente a digiuno
    Il form attualmente funziona inviando il testo nel corpo del messaggio ed un unico allegato.
    Tutti gli altri allegati non vengono proprio presi in considerazione.
    Estratto del form HTML
    codice:
    <form action="form-a-step.php" method="post" enctype="multipart/form-data" id="presentazioneistanza">
    <label for="NomeC">Nome </label>
    <input class="required" type="text" name="NomeC20" id="NomeC20" value="" />
    <label for="CognomeC">Cognome </label>
    <input class="required" type="text" name="CognomeC20" id="CognomeC20" value="" />
    <label for="allegato">Seleziona il file</label>
    <input type="file" name="allegato" id="allegato" value="" style="width:200px">
    <div class="clear"></div>
    <label for="allegato1">Seleziona il file</label>
    <input type="file" name="allegato1" id="allegato1" value="" style="width:200px">
    <div class="clear"></div>
    ...
    estratto del php
    Codice PHP:
    <?php
    //dati generali
    $NomeC20 stripslashes(stripslashes($_POST['NomeC20']));
    $CognomeC20 stripslashes(stripslashes($_POST['CognomeC20']));

    // Valorizzo le variabili relative all'allegato

    $allegato $_FILES['allegato']['tmp_name'];
    $allegato_type $_FILES['allegato']['type'];
    $allegato_name $_FILES['allegato']['name'];
    $allegato1 $_FILES['allegato1']['tmp_name'];
    $allegato1_type $_FILES['allegato1']['type'];
    $allegato1_name $_FILES['allegato1']['name'];
    // Creo 2 variabili che riempirò più avanti...
    $headers "From: " $Email;$msg "";
    // Processo di configurazione dell'email
    // [Destinatario, Mittente, Oggetto e Messaggio ] 
    $mail_to "giranapoli@giranapoli.it";
    $mail_from "$Email";
    $mail_subject "Nuovo Form a Step";
    $mail_body "

    Richiesta informazioni Nuovo Form a Step</p>


    Nome: 
    $NomeC20</p>


    Cognome: 
    $CognomeC20</p>";

    // Verifico se il file è stato caricato correttamente via HTTP
    // In caso affermativo proseguo nel lavoro...
    if (is_uploaded_file($allegato))
    {  
    // Apro e leggo il file allegato  
    $file fopen($allegato,'rb');  
    $data fread($filefilesize($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/html; charset=ISO-8859-15\n";   
    $msg .= "Content-Transfer-Encoding: 7bit\n\n"
    $msg .= $mail_body "\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";   

    // Intestazioni HTML
    $mail_in_html "MIME-Version: 1.0\r\n";
    $mail_in_html .= "Content-Type: text/html; charset=ISO-8859-15\n";
    $mail_in_html .= "From: <$mail_from>";

    // Processo di invio
    if (mail($mail_to$mail_subject$msg$headers))
    {
    header("Refresh: 2; URL=/provaform/demo.html");
    print 
    "Mail inviata con successo, ti risponderemo nel più breve tempo possibile. Grazie!";

    else if (
    is_uploaded_file($allegato1)){  
    // Apro e leggo il file allegato1  
    $file1 fopen($allegato1,'rb');  
    $data1 fread($filefilesize($allegato1));  
    fclose($file1);

    // Adatto il file al formato MIME base64 usando base64_encode  
    $data1 chunk_split(base64_encode($data1));
     
    // 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/html; charset=ISO-8859-15\n";    
    $msg .= "Content-Transfer-Encoding: 7bit\n\n"
    $msg .= $mail_body "\n\n";

    // Metto il separatore  
    $msg .= "--{$mime_boundary}\n";

    // Aggiungo l'allegato al messaggio  
    $msg .= "Content-Disposition: attachment;\n";  
    $msg .= " filename=\"{$allegato1_name}\"\n";  
    $msg .= "Content-Transfer-Encoding: base64\n\n";  
    $msg .= $data "\n\n";
      
    // chiudo con il separatore  
    $msg .= "--{$mime_boundary}--\n";   
    // Intestazioni HTML
    $mail_in_html "MIME-Version: 1.0\r\n";
    $mail_in_html .= "Content-Type: text/html; charset=ISO-8859-15\n";
    $mail_in_html .= "From: <$mail_from>";
    // Processo di invio 
    if (mail($mail_to$mail_subject$msg$headers))
    {
    header("Refresh: 2; URL=/provaform/demo.html");
    print 
    "Mail inviata con successo, ti risponderemo nel più breve tempo possibile. Grazie!";
    }
    {
    header("Refresh: 1; URL=/provaform/demo.html");
    print 
    "Errore";
    }         
    }
    else{ 
    // Intestazioni HTML
    $mail_in_html "MIME-Version: 1.0\r\n";
    $mail_in_html .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $mail_in_html .= "From: <$mail_from>";

    // Processo di invio 
    // domando sostituito
    if (mail($mail_to$mail_subject$mail_body$mail_in_html))

    {
    header("Refresh: 2; URL=/provaform/demo.html");
    print 
    "Mail inviata con successo, ti risponderemo nel più breve tempo possibile. Grazie!";
    }
    else{
    header("Refresh: 1; URL=/provaform/demo.html");
    print 
    "Errore";
    }  
    }
    ?>
    in parole povere il php funziona perfettamente con un unico allegato, quindi mi sono limitato a clonare il comando
    Codice PHP:
    if (is_uploaded_file($allegato1)) 
    modificando il nome della variabile in <allegato1>
    La cosa che non mi aspettavo è che non mi da nessun messaggio di errore e continua a funzionare con l'aggiunta di questa parte di codice... ovviamente senza inviare il secondo allegato.
    Confido in un vostro aiuto,
    Grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Secondo me devi creati una variabile o un array dove inserirai tutti i file che dovrai allegare e aggiungerla alla mail
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Ciao, ti consiglio di utilizzare la classe phpMailer.

    http://phpmailer.worxware.com/

  4. #4
    @cavicchiandrea: purtroppo non ho la minima idea di come fare ad inserire degli "array", ripeto non conosco php, mi limito ad andare avanti per intuizioni e tentativi. Gentilmente se potessi darmi una mano te ne sarei grato. Sono ormai due settimane e più che non riesco ad uscire da questo pantano.

    @supercapocc: prima di scrivere un post qui, ho cercato discussioni in merito ovunque e già in altri casi mi sono imbattuto nella classe phpmailer, quindi ho provato a seguire anche quella strada, ma ho fatto flop. Dopo aver scaricato e scompatta la cartella phpmailer, ho caricato i file sull'ftp, aggiunto il codice
    Codice PHP:
    <?php
    // inizializzazione PHPmailer
    require("class.phpmailer.php");
    $mail = new PHPMailer();
    ?>
    per testare la configurazione della classe e non ci sono stati errori...
    Ok, ma poi che devo fare??? Per questo non sono andato avanti. Non conoscendo il php, anche con tutta la buona volontà, mi devo fermare.

    Aiutoooo

  5. #5
    Originariamente inviato da giranapoli

    Ok, ma poi che devo fare??? Per questo non sono andato avanti. Non conoscendo il php, anche con tutta la buona volontà, mi devo fermare.
    Potresti leggere la documentazione della classe, ci sono degli esempi...

    Come questo :

    http://phpmailer.worxware.com/index.php?pg=exampleamail

    Noi hai dimestichezza con il PHP,ma con l'inglese? i metodi utilizzati dalla classe hanno nomi intuitivi...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.