Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 52
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    828

    allegati in email scaricabili da link

    Ho seguito molti tutorial per generare una contact form PHP con allegato, ma sono tutti molto complessi e vorrei trovare una soluzione semplice, con veramente poche righe di codice. Spero qualcuno possa aiutarmi.

    Per ora nella form ho solo il codice del pulsante "sfoglia":
    codice HTML:
    <label class="solo" for='attachment'>CARICA FILE</label><input name="attachment" id="attachment" type="file"/>
    Con una semplice verifica di tipo e grandezza file, vorrei che gli allegati si mettessero tutti in una cartella, e che poi dalla mail che ricevo siano scaricabili con un semplice link.

    Se qualcuno ha avuto lo stesso dilemma, come avete risolto? Ringrazio per l'attenzione.

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    828
    Non trovo la soluzione, perchè non c'è un tutorial uguale all'altro per questo problema di caricare un file sul server ed includere un link per scaricarlo nella mail che ricevo dagli utenti del sito.
    Finora ho realizzatoi il seguente codice, che vorrei integrare ad una contact form già perfettamente funzionante.

    $allowedExts = array("jpeg", "doc", "pdf", "zip", "rar");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);
    if ((((($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "application/doc")
    || ($_FILES["file"]["type"] == "application/docx")
    || ($_FILES["file"]["type"] == "application/pdf"))
    || ($_FILES["file"]["type"] == "application/zip"))
    || ($_FILES["file"]["type"] == "application/rar"))
    && ($_FILES["file"]["size"] < 20000)
    && in_array($extension, $allowedExts))
    {
    if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
    if (file_exists("attachments/" . $_FILES["file"]["name"]))
    {
    echo $_FILES["file"]["name"] . " already exists. ";
    }
    else
    {
    move_uploaded_file($_FILES["file"]["tmp_name"],
    "attachments/" . $_FILES["file"]["name"]);
    echo "Stored in: " . "attachments/" . $_FILES["file"]["name"];
    }
    }
    else
    {
    echo "Invalid file";
    }


    Mi date un aiuto? Un paio di semplici istruzioni in modo che posso far funzionare il campo:
    $mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: ".$_POST['file']."\n\n";

  3. #3
    Tutto quello spezzone di codice php che hai postato, se aggiunto alla gestione del post della maschera (che però deve avere method=poste e enctype="multipart/form-data") , ti salva il file allegato nella cartella attachments del sito, che però deve esistere ed essere visitabile dall'esterno.

    A quel punto basterà:

    $mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: http://www.tuodominio.com/attachments/".$_POST['file']."\n\n";


    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  4. #4
    Al posto di tutte quelle condizioni nella if bastava mettere le estensioni permesse in un array e poi utilizzare la funzione in_array().
    Sono disponibile per realizzare lavori su commissione.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    828
    Bisogna che mi aiutate fino in fondo, perchè di PHP non so niente ed ho seguito un tutorial per creare quel codice. Sto anche guardando la funzione in_array da applicare ad allegati per email, ma non trovo il capo della corda.
    La mia maschera ha method e enctype in ordine, e la cartella attachment è visitabile dall'esterno. Il mio $mail->Body era già come mi indicate, ma non funziona (la form rimane in sospeso e non invia).
    Avete un minuto di tempo della vostra domenica per scrivermi il codice?

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Codice PHP:
    <?php
    $allowedExts 
    = array("jpeg""jpg""doc""pdf""zip""rar");
    $allowedTypes = array("image/jpg","image/jpeg""image/pjpeg""application/doc""application/docx""application/pdf""application/zip""application/rar");
    $temp explode("."$_FILES["attachment"]["name"]);
    $extension end($temp);
    if (
    in_array($_FILES["attachment"]["type"], $allowedTypes) && ($_FILES["attachment"]["size"] < 20000000) && in_array($extension$allowedExts)) {
        if (
    $_FILES["attachment"]["error"] > 0) {
            echo 
    "Error: " $_FILES["attachment"]["error"] . "<br>";
        }
        else {
            echo 
    "Upload: " $_FILES["attachment"]["name"] . "<br>";
            echo 
    "Type: " $_FILES["attachment"]["type"] . "<br>";
            echo 
    "Size: " . ($_FILES["attachment"]["size"] / 1024) . " Kb<br>";
            echo 
    "Stored in: " $_FILES["attachment"]["tmp_name"] . "<br />";
        }
        if (
    file_exists("attachments/" $_FILES["attachment"]["name"])) {
            echo 
    $_FILES["attachment"]["name"] . " already exists. <br />";
        }
        else {
            
    move_uploaded_file($_FILES["attachment"]["tmp_name"], "attachments/" $_FILES["attachment"]["name"]);
            echo 
    "Stored in: " "attachments/" $_FILES["attachment"]["name"] ."<br />";
        }
    }
    else {
        echo 
    "Invalid file";
    }
    per quanto riguarda la parte
    $mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da: http://www.tuodominio.com/attachments/".$_POST['file']."\n\n";

    puoi fare così
    Codice PHP:
    $linkAlFile =  $_FILES["attachment"]["name"];
    $mail->Body .= "Il cliente ha inviato un allegato, che puoi scaricare da:  http://www.tuodominio.com/attachments/".$linkAlFile."\n\n"
    Ultima modifica di clasku; 23-02-2014 a 12:39

  7. #7
    Bisogna che tu ci posti l'INTERO codice php della pagina di ricezione della form!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    dipende, se deve solo gestire l'upload del file basta quello che ha postato...

    in realtà il problema serio è la discordanza tra il nome del campo della form e l'indice di $_FILES (rispettivamente "attachment" e "file")
    per il resto quello che ha postato andava già quasi bene, fatta eccezione per la sfilza di if nel primo controllo

    una nota per l'autore del topic: devi includere tutte le tipologie di filetype ed estensioni che vuoi accettare, altrimenti ti perdi qualche tipo di file (ad esempio, io ho aggiunto "image/jpeg" e "jpg")

  9. #9
    Quote Originariamente inviata da clasku Visualizza il messaggio
    dipende, se deve solo gestire l'upload del file basta quello che ha postato...

    in realtà il problema serio è la discordanza tra il nome del campo della form e l'indice di $_FILES (rispettivamente "attachment" e "file")
    per il resto quello che ha postato andava già quasi bene, fatta eccezione per la sfilza di if nel primo controllo

    una nota per l'autore del topic: devi includere tutte le tipologie di filetype ed estensioni che vuoi accettare, altrimenti ti perdi qualche tipo di file (ad esempio, io ho aggiunto "image/jpeg" e "jpg")
    Beh, no, non basta quel che ha postato: dice che la form rimane in sospeso e non invia, per cui bisogna capire cosa intende; se per "non invia" intende non invia la mail di avviso a me, nel codice che ha postato non c'è da nessuna parte qualcosa coma $mail->Send() o similari, quindi per forza che non invia la mail...

    Sono invece daccordo con te sul nome della input: tutte le occorrenze di $_FILES["file"] dovrebbero diventare $_FILES["attachment"]...

    Quanto al discorso dell tipologie file, si, perchè lo script accetti quelle tipologie di file è necessario siano citate negli array, ma attenzione: TUTTO il contenuto di $_FILE , tranne $_FILES["file"]["tmp_name"] , proviene dal browser dell'utente e non è PER NULLA affidabile.

    Per capirci, uno script così fatto lascerebbe tranquillamente passare un file .exe che io avessi rinominato in .jpg, quindi NON considerate uno script del genere come neanche lontanamente sicuro.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2007
    residenza
    Trieste
    Messaggi
    828
    oh grazie tante per l'aiuto, non mi aspettavo che in una domenica soleggiata qualcuno dedicasse del tempo a creare un codice. Adesso voglio studiare le varie soluzioni che mi proponete.
    D'accordo anche io che ogni "file" va cambiato in "attachment", ma io stesso non sapevo quale cambiare e quale no.
    Comunque, per testare la form, sta su www.lalegatoria.it, nella quarta tab (preventivi), cliccate su "preventivi" e compare la form. Ma il flip funziona solo su Firefox (devo ancora implementarlo). Il file della form è il seguente:

    Codice PHP:
    <form method="post" id="captcha_form" name="captcha_form" action="contact/mailform.php" enctype="multipart/form-data">
    <
    fieldset>
    <
    ol>
        <
    div id="columnleft">
            <!-- <
    li id="ht"><label class="solo" for="htest">Leave this input blank</label><input type="text" class="soloinput" name="htest" id="htest" value="" /></li> -->
            <
    br><br>
            <
    li></li> <!-- this is a dotted border -->
            <
    li><label class="solo" for="email">INDIRIZZO EMAIL</label><input type="text" class="soloinput" name="email" id="email" value="" /></li>
            <
    li><label class="solo" for="name">NOME</label><input type="text" class="soloinput" name="name" id="name" value="" /></li>
            <
    li><label class="solo" for="companyname">AZIENDA</label><input type="text" class="soloinput" name="companyname" id="companyname" value="" /></li>
            <
    li><label class="solo" for="phone">TELEFONO</label><input type="text" class="soloinput" name="phone" id="phone" value="" /></li>
            <
    li><label class="solo" for="besttime">CONTATTARE</label>
                <
    select class="soloinput" name="besttime" id="besttime">
                    <
    option value="0"> </option>
                    <
    option value="in qualsiasi orario">qualsiasi orario</option>
                    <
    option value="di mattina">mattina</option>
                    <
    option value="nelle ore pasti">ore pasti</option>
                    <
    option value="di pomeriggio">pomeriggio</option>
                    <
    option value="la sera">sera</option>
                </
    select>
            </
    li>
        </
    div>
        <
    div id="columnright">
            <
    br><br>
            <
    li></li> <!-- this is a dotted border -->
            <
    li><label class="solo" for="subject">OGGETTO</label><!-- <span class="required">(required)</span> -->
                <
    select class="soloinput" name="subject" id="subject">
                    <
    option value=0> </option>
                    <
    option value=1>legatoria</option>
                    <
    option value=2>restauro</option>
                    <
    option value=3>grafica</option>
                    <
    option value=4>stampa</option>
                    <
    option value=5>amministrazione</option>
                    <
    option value=6>altro</option>
                </
    select>
            </
    li>
            <
    li><label class="solo" for="message">RICHIESTA</label>
                <
    textarea class="soloinput" name="message" id="message"></textarea>
            </
    li>
                <
    label class="solo" for='attachment'>CARICA FILE<br>.jpg  .doc  .pdf  .zip  .rar</label><input name="attachment" id="attachment" type="file" style="float:right; margin:10px 20px 0 0; padding:2px; color:#FFF; font-family:inherit; text-transform:lowercase;"/>
                <
    input name="submit" id="submit" type="submit" value="invia" style="float:right; margin:10px 80px 0 0; padding:2px; color:#FFF; background-color:#67522C; font-family:inherit; text-transform:uppercase;" />
                <
    input name="submit" id="submit" type="reset" value="cancella" style="float:right; margin:10px 20px 0 0; padding:2px; color:#FFF; background-color:#67522C; font-family:inherit; text-transform:uppercase;" />
        </
    div>
    </
    ol>
    </
    fieldset>
    </
    form
    mentre il file php (dal quale escludo una sezione antispam che non funziona) è il seguente:

    Codice PHP:
    <?php 
    $dontsendemail 
    0;
    $possiblespam FALSE;
    $strlenmessage "";
    $email $_REQUEST['email']; 
    $emailaddress "commerciale@lalegatoria.it";
    $name $_REQUEST['name'];strlencheck($name,0,60,"Hai indicato un nome troppo lungo, o non hai indicato un nome proprio. Torna indietro e correggi l'errore.");
    $companyname $_REQUEST['companyname'];strlencheck($companyname,0,60,"Hai indicato un nome aziendale troppo lungo, o non hai indicato un nome proprio. Torna indietro e correggi l'errore.");
    $phone $_REQUEST['phone'];checkphone($phone,0,"Hai indicato un numero di telefono improprio. Torna indietro e correggi l'errore."); 
    $besttime $_REQUEST['besttime'];
    $subject = array(); 
        
    $subject[1] = legatoria;
        
    $subject[2] = restauro;
        
    $subject[3] = grafica;
        
    $subject[4] = stampa;
        
    $subject[5] = amministrazione;
        
    $subject[6] = altro;
        
    $subjectindex $_REQUEST['subject'];
        if (
    $subjectindex == || !isset($_REQUEST['subject'])) die ("Non hai scelto l'oggetto del tuo messaggio. Torna indietro e correggi l'errore.");
        else 
    $subject $subject[$subjectindex];
    $message $_REQUEST['message']; 
    $message="";
        
    $message.="Name: ".$name."\r\n";
        
    $message.="Company Name: ".$companyname."\r\n";
        
    $message.="Phone Number: ".$phone."\r\n";
        
    $message.="Best time to call: ".$besttime."\r\n";
        
    $message $message."\r\nMessage:\r\n".$_REQUEST['message'];
            
    //mail($emailaddress,"$subject",$message,"From: $email" ); include "email_sent.php";
    }

    /* --------- attachments settings --------- */
    $allowedExts = array("jpeg""doc""pdf""zip""rar");
    $temp explode("."$_FILES["file"]["name"]);
    $extension end($temp);
    if (((((
    $_FILES["file"]["type"] == "image/jpeg")
    || (
    $_FILES["file"]["type"] == "image/jpg")
    || (
    $_FILES["file"]["type"] == "image/pjpeg")
    || (
    $_FILES["file"]["type"] == "application/doc")
    || (
    $_FILES["file"]["type"] == "application/docx")
    || (
    $_FILES["file"]["type"] == "application/pdf"))
    || (
    $_FILES["file"]["type"] == "application/zip"))
    || (
    $_FILES["file"]["type"] == "application/rar"))
    && (
    $_FILES["file"]["size"] < 20000)
    && 
    in_array($extension$allowedExts))
        {
            if (
    $_FILES["file"]["error"] > 0)
              {
              echo 
    "Error: " $_FILES["file"]["error"] . "<br>";
              }
            else
              {
              echo 
    "Upload: " $_FILES["file"]["name"] . "<br>";
              echo 
    "Type: " $_FILES["file"]["type"] . "<br>";
              echo 
    "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br>";
              echo 
    "Stored in: " $_FILES["file"]["tmp_name"];
              }
            if (
    file_exists("attachments/" $_FILES["file"]["name"]))
              {
              echo 
    $_FILES["file"]["name"] . " already exists. ";
              }
            else
              {
              
    move_uploaded_file($_FILES["file"]["tmp_name"],
              
    "attachments/" $_FILES["file"]["name"]);
              echo 
    "Stored in: " "attachments/" $_FILES["file"]["name"];
              }
        }
        else
          {
          echo 
    "Invalid file";
          }


      
    /* ------------------  SMTP EMAIL SETTINGS ------------------------- */
    require_once("class.phpmailer.php");
    //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
    $mail = new PHPMailer();
    $mail->IsSMTP();  // telling the class to use SMTP
    $mail->Host     "lalegatoria.it"// SMTP server
    // $mail->SMTPDebug  = 2;                     // 0 for production use, 1 errors and messages, 2 messages only
    $mail->SMTPAuth   true;                  // enable SMTP authentication
    $mail->SMTPPort  25;                    // set the SMTP port for the GMAIL server
    $mail->Username   "smtp@lalegatoria.it"// SMTP account username
    $mail->Password   "Leogin02!";        // SMTP account password
    $mail->CharSet  'UTF-8';  // so it interprets foreign characters
    $mail->From $mail->Username
    $mail->AddAddress("commerciale@lalegatoria.it""Paola & Alberto");
    $mail->AddAttachment($attachments);      // attachment
    $mail->Subject  "RICHIESTA PREVENTIVO DAL NS. SITO WEB";
    $mail->Body     .= "Abbiamo appena ricevuto una richiesta di preventivo da: ".$_POST['name']."\n";
    $mail->Body     .= "Nome dell'azienda: ".$_POST['companyname']."\n\n";
    $mail->Body     .= "Contattare al numero: ".$_POST['phone']."\n";
    $mail->Body     .= "preferibilmente: ".$_POST['besttime']."\n";
    $mail->Body     .= "oppure all'indirizzo email: ".$_POST['email']."\n\n";
    $mail->Body     .= "Il messaggio ha per oggetto: ".$subject."\n";
    $mail->Body     .= "Testo del messaggio: ".$_POST['message']."\n\n";
    $mail->Body     .= "Il cliente ha inviato un allegato, che puoi scaricare da: http://www.lalegatoria.it/attachments/".$_POST['file']."\n\n";
    $mail->Body     .= "Non dimentichiamoci che la richiesta ha carattere di urgenza!";
    $mail->WordWrap 150;

    if(!
    $mail->Send()) {
      echo 
    'Non è stato possibile inviare il Vs. messaggio.';
      echo 
    'Mailer error: ' $mail->ErrorInfo;
    } else {
      echo 
    'La Vs. email è stata inviata. Riceverete ns. riscontro a breve.';
    }
    ?>
    Ultima modifica di stardom; 23-02-2014 a 14:04

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.