[PHP] Invio mail automatico dopo compilazione form - db

Discussione in 'PHP' iniziata da Borghese, 3 Febbraio 2019.

  1. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao a tutti ragazzi,

    credetemi, penso di aver letto qualsiasi topic con la richiesta simile alla mia, ma non ho trovato la risposta, e non ne vengo a capo , vi spiego :

    Ho un sito in Php, che prevede la compilazione di un form con alcuni dati.
    Questi dati vengono poi scritti in un db mysql

    Ora io vorrei che, dopo che uno degli utenti che ho creato sul db,si è loggato sul portale, e ha compilato il form, partisse in automatico una mail a un indirizzo/dl da me scelti. (Attenzione non voglio che sia l'utente a decidere se generare o meno la mail, voglio proprio che parta in automatico una volta salvato il form)

    Come posso fare ?

    Preciso che nel db chiaramente sono presenti sia la tabella che viene popolata dopo la compilazione del form, sia la tabella degli utenti autorizzati ad accedere al sito, con i relativi indirizzi mail.

    E possibile fare quello che chiedo ?
     
  2. mr.x

    mr.x Utente Attivo

    Registrato:
    9 Aprile 2016
    Messaggi:
    167
    Mi Piace Ricevuti:
    22
    Punteggio:
    28
    Inserisci la funzione di invio email dopo la query di inserimento dati presi dal form
     
  3. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ok... puoi aiutarmi a capire come fare questa funzione ? E questo che non riesco a capire, come sia il codice da scrivere ...
     
  4. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Allora, ho provato a inserire questa funzione, dopo il richiamo all'inserimento dei dati nel db (mysqli_query) :
    PHP:
    $nome_mittente "xxxxxxxxxxxxxxx";
    $mail_mittente "xxxxxxxxxxxxxxx@gmail.com";
    $mail_destinatario "xxxxxxxxxxxxxxx.@me.com";

    $mail_oggetto "Messaggio di prova";

    $mail_corpo = <<<HTML
    <html>
    <head>
      <title>Prova Invio Nuovo Incident</title>
    </head>
    <body>
    Questo è un messaggio di prova l'<b>invio di mail in HTML</b> con la funzione mail() di PHP
    </body>
    </html>
    HTML;

    $mail_headers "From: " .  $nome_mittente " <" .  $mail_mittente ">\r\n";
    $mail_headers .= "Reply-To: " .  $mail_mittente "\r\n";
    $mail_headers .= "X-Mailer: PHP/" phpversion() . "\r\n";

    // Aggiungo alle intestazioni della mail la definizione di MIME-Version,
    // Content-type e charset (necessarie per i contenuti in HTML)
    $mail_headers .= "MIME-Version: 1.0\r\n";
    $mail_headers .= "Content-type: text/html; charset=iso-8859-1";

    if (
    mail($mail_destinatario$mail_oggetto$mail_corpo$mail_headers))
      echo 
    "Messaggio inviato con successo a " $mail_destinatario;
    else
      echo 
    "Errore. Nessun messaggio inviato.";
    l'ho messo all'interno dello stesso codice php del form.
    Ho provato a inserire dei dati, salvando il form, ma la mail non parte

    Dove sto sbagliando ?!?
     
    Ultima modifica di un moderatore: 3 Febbraio 2019
  5. Max 1

    Max 1 Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    29 Febbraio 2012
    Messaggi:
    3.610
    Mi Piace Ricevuti:
    268
    Punteggio:
    83
    Sesso:
    Maschio
    @Borghese
    Da regolamento del forum, come tutti noi sei tenuto ad usare il tag [​IMG] o il tag [​IMG] per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
    [​IMG]
    Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
    Grazie

    Per questa volta te lo sistemo io ma mi raccomando per il futuro
     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
  7. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Scusa Max! Non ricapiterà :) Grazie!
     
  8. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    vado subito a leggere Marino!! Grazie 1000
     
  9. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Mi sono letto tutto il topic, e studiato gli script. La funzione mi è chiara, ma ho alcuni dubbi :

    Ho usato lo script "semplice" per l'invio :

    PHP:
    # http://localhost/test_site/php/test/MAIL/PHPMail_Test.php

    if (isset($_POST['Submitted'])){

      // estrae e stampa variabili e valori da $_POST
      print '<table width="500" border="0" cellspacing="5" cellpadding="5">';
      while(list($chiave, $valore)=each($_POST)){
        ${$chiave}=trim(strip_tags($valore));
        print "<tr><td>".$chiave." : </td><td>".${$chiave}."</td></tr>";
      }
      print "</table>";


    //  require_once 'Config_MAIL.php';    // servizi SMTP disponibili
    //  SMTPservice(1);            // sceglie il servizio SMTP da usare per invio mail, da Config_MAIL.php

      // utilizza i parametri seguenti NON quelli di php.ini, solo per questo script
      ini_set("SMTP"     ,$eM_Host);
      ini_set("smtp_port",$eM_Port);
      ini_set("username" ,$eM_username);
      ini_set("password" ,$eM_password);

      // prepara e invia messaggio
      // per FROM viene usato $eM_username per evitare il rifiuto dell' invio (invece che $emailFROM)
      $eM_header = "MIME-Version: 1.0\r\n";
      $eM_header.= "Content-type: text/html; charset=utf-8\r\n";
      $eM_header.= "From: <".$eM_username.">\r\n";

      if(!empty($eM_CC1))  $eM_header.= "cc: " .$eM_CC1 ."\r\n";    // copia conoscenza
      if(!empty($eM_BCC1)) $eM_header.= "Bcc: ".$eM_BCC1."\r\n";    // copia conoscenza nascosta

      if(!empty($eM_ReplyTo)) $eM_header.= "Reply-To: ".$eM_ReplyTo."\r\n";    // rispondere a ...

      if (mail($eM_TO1, $eM_subject, $eM_body, $eM_header)) print "<b>MESSAGGIO INVIATO</b>";
      else                                                  print "<b>ERRORE : MESSAGGIO NON INVIATO</b>";

      print "<br /><br /><a href=\"PHPMail_Test.php\">RIPROVA</a>";
    }
    else{

      require_once 'Config_MAIL.php';    // servizi SMTP disponibili
      SMTPservice(1);            // sceglie il servizio SMTP da provare per invio mail, da Config_MAIL.php


    ?>
    <!DOCTYPE html>
    <form action="PHPMail_Test.php" method="post" enctype="multipart/form-data" name="myform" id="myform">
      <table width="500" border="0" cellspacing="5" cellpadding="5">
        <caption>&nbsp;</caption>
        <tr>
          <td colspan="2"><b>PROVA INVIO MAIL (funzione mail di php)</b></td>
        </tr>
        <tr>
          <td width="165"><label for="eM_Host">Servizio SMTP :</label></td>
          <td width="300"><input type="text" name="eM_Host" id="eM_Host" required value="<?= $eM_Host?>" size="50"></td>
        </tr>
        <tr>
          <td width="165"><label for="eM_Port">Porta :</label></td>
          <td width="300"><input type="text" name="eM_Port" id="eM_Port" required value="<?= $eM_Port?>" size="50"></td>
        </tr>
        <tr>
          <td><label for="eM_username">Utente registrato :</label></td>
          <td><input type="email" name="eM_username" id="eM_username" required value="<?= $eM_username?>" size="50"></td>
        </tr>
        <tr>
          <td><label for="eM_password">Password :</label></td>
          <td><input type="text" name="eM_password" id="eM_password" required value="<?= $eM_password?>" size="50"></td>
        </tr>
        <tr>
          <td><label for="eM_FROM">e-mail from :</label></td>
          <td><input type="email" name="eM_FROM" id="eM_FROM" required value="<?= $eM_username?>" size="50"></td>
        </tr>
        <tr>
          <td><label for="eM_TO1">e-mail to :</label></td>
          <td><input type="email" name="eM_TO1" id="eM_TO1" required value="<?= $eM_TO1?>" size="50"></td>
        </tr>
        <tr>
          <td><label for="eM_subject">Oggetto :</label></td>
          <td><input type="text" name="eM_subject" id="eM_subject" required value="oggetto per messaggio di prova" size="50"></td>
        </tr>
        <tr>
          <td><label for="eM_body">Messaggio :</label></td>
          <td><input type="text" name="eM_body" id="eM_body" required value="testo del messaggio di prova" size="50"></td>
        </tr>
        <tr>
          <td colspan="2">&nbsp;</td>
        </tr>
        <tr>
          <td colspan="2"><input name="submit" type="submit" id="submit" formaction="PHPMail_Test.php" formenctype="multipart/form-data" formmethod="POST" value="Invia"></td>
        </tr>
        <tr>
          <td colspan="2"><span class="autorizzo">Autorizzo ai sensi del D. Lgs. 30 Giugno 2003 n. 196 il trattamento dei dati personali trasmessi</span></td>
        </tr>
      </table>
      <input type="hidden" name="eM_TO2" value="">
      <input type="hidden" name="eM_CC1" value="">
      <input type="hidden" name="eM_BCC1" value="">
      <input type="hidden" name="eM_ReplyTo" value="">

      <input type="hidden" name="Submitted" value="1" />
    </form>
    </html>
    <?PHP
    }
    ?>
    questo script, l'ho inserito dentro il codice php che richiama la compilazione del form, subito dopo la funzione di inserimento dati nel db
    Ho importato anche il file Config:MAIL.php nella stessa cartella del webserver, che ha questo codie :

    PHP:
    <?php
    function SMTPservice($service) {
      global 
    $eM_Host,$eM_Port,$eM_Auth,$eM_Secure,$eM_username,$eM_password;

      switch (
    $service) {

          
    $eM_Host     "smtp.gmail.com";        // ok PHPmailer
          
    $eM_Port     465;
          
    $eM_Auth     true;
          
    $eM_Secure   "ssl";
          
    $eM_username "ilmioaccount@gmail.com";
          
    $eM_password "la pwd del mio account";
          break;
      }
      return;
    }
    ?>
    Salvato tutto, ho provato a compilare il form, salvando, i dati vengono correttamente scritti nel db (come prima del resto) ma non parte alcuna mail.

    Mi aiutate a capire dove e cosa sto sbagliando ?!
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    $eM_Host = "smtp.gmail.com"; // ok Phpmailer
    gmail lo gestisci con phpmailer
     
  11. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Allora, ho fatto un piccolo passo avanti :

    ho scaricato il class.phpmailer.php
    ho scaricato il class.smtp.php
    ho scaricato un modulo di prova html
    ho scaricato il file richiesta info.php contenente le impostazioni del mio accout gmail

    ho messo tutto nel percorso del webserver

    Ho raggiunto il modulo html via browser web, e compilando il form, ricevo correttamente la mail

    Ora dovrei, "trasportare" la funzione, nel form esistente sul mio sito.
    Ho provato a mettere la funzione all'inizio del form, ma non funziona :

    [
    mi aiutate a capire dove sbaglio ?
     
    Ultima modifica: 4 Febbraio 2019
  12. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    il form deve contenere tutte le info che vuoi ottenere da chi lo compila,
    quando compilato, la pressione di un tasto "submit",
    richiama uno script php
    che prende i dati dall'array $_POST (vedi method="POST"),
    gestisce l'aggiornamento del db,
    invia la mail,
    quindi richiama una pagina successiva

    nelle 3 righe postate, hai inserito 2 "form" con richiamati 2 script diversi
    dovresti dichiarare un solo "form" e richiamare un solo script che compie le azioni sopra descritte
    (vedi come sono fatti gli esempi che ti ho indicato)

    considera anche che il tuo indirizzo mail, come lo hai inserito, é di fatto alla vista di tutti coloro che vogliono guardare il codice html della tua pagina, andrebbe messo nello stesso script con i parametri del provider del servizio mail
     
  13. kastaldi

    kastaldi Nuovo Utente

    Registrato:
    3 Febbraio 2016
    Messaggi:
    21
    Mi Piace Ricevuti:
    0
    Punteggio:
    3
    Uso anche io phpmailer in una form di iscrizione corsi per la conferma dei dati inseriti e funziona egregiamente, tutti i parametri lasciali a livello di php, non metterli in chiaro nella pagina html, possibilmente in un .php fuori dalla Document-Root (se usi Apache).
     
  14. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    ok allora se ho capito bene :

    il contenuto di richiestainfo.php lo metto dentro lo stesso script che richiama il form (Incident/Addnew.php)

    Considerate che il form stesso è in php. non è in html

    Per intenderci, questo è il codice del form :
    [
    mi è chiaro il discorso dell'indirizzo, da mettere nello script per non farlo vedere nel codice della pagina.
    non mi è chiaro però come implementare il codice php del form.... mi potete aiutare per favore solo in questo ?!
     
    Ultima modifica: 4 Febbraio 2019
  15. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ci sono riuscito !!!!!!!!!

    Ho messo lo script in php di invio mail dopo il php di compilazione e ora la mail parte regolarmente.

    Adesso mi basterebbe poter creare il corpo della mail con i dati appena inseriti nel db....ma sono veramente al buio!!!
     
    Ultima modifica: 4 Febbraio 2019
  16. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    sempre ripreso dall'esempio con phpmailer,
    PHP:
    // ----- impostazione del messaggio
        
    $mail->WordWrap   80;     // set word wrap
        
    $mail->IsHTML(true);        // send as HTML

        
    $eM_body  ="<p>questo é il corpo del mio messaggio</p>";
        
    $eM_body .="<p>a cui aggiungo il valore che viene dal form " $_POST['nome'] . "</p>";

        
    $mail->Subject "qui ci metto l'oggetto seguito dalla data e ora di invio" date('d-m-Y H:i:s');

        
    $mail->Body    $eM_body;
     
  17. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Marino GRAZIE!!!!
    Ora sono riuscito a ottenere un corpo mail abbastanza pulito, ordinato, e leggibile. Ho messo i campi salienti nell'oggetto, e tutto il resto che viene dal form nel body

    Adesso mi rimane da fare solo una cosa :

    Ho dei campi nel form, che in realtà nel db scrivono un valore numerico, spiego meglio :

    Facciamo finta che nel form ci sia una domanda tipo : "Che priorità dai all'amore ?" risposte : "HIGH" "MEDIUM" "LOW"

    Ora, lo script php, nel db non mi scrive high, medium o low, ma 1 (se high) 2 se (medium) e 3 (se low)

    Chiaramente adesso, se richiamo il campo del form con lo script di phpmailer, nella mail mi ritrovo 1, 2 o 3

    Come faccio a dirgli, in quello script, se leggi 1 restituiscimi HIGH, 2 Medium e cosi via ?

    Ho provato con la funzione IF/Else ma non mi esce....
     
  18. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    puoi evitare if/else con questo codice,
    PHP:
    $priorita = array( => "HIGH"=> "MEDIUM"=> "LOW" );

    echo 
    $priorita[2];
    con il risultato

    upload_2019-2-6_8-47-50.png
     
    Ultima modifica: 6 Febbraio 2019
  19. Borghese

    Borghese Nuovo Utente

    Registrato:
    3 Febbraio 2019
    Messaggi:
    14
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Grazie Marino, ma niente da fare. Ci ho provato in tutti i modi, ma o non và a buon fine la compilazione del form (pagina bianca) o la mail non viene spedita.
    Così è come ho messo lo script, sbaglio qualcosa :
     
    Ultima modifica: 9 Febbraio 2019
  20. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.431
    Mi Piace Ricevuti:
    121
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    dovresti imparare a leggere il log degli errori di php
    perché ci sono diversi errori nello script che hai postato,
    confronta con lo script che segue per avere almeno l'idea di dove sono gli errori

    per inviare posta con gmail ho sempre usato porta 465 e crittografia ssl non proprio ciò che hai messo nel tuo script
    PHP:
    <?php

        $priorita 
    = array( => "HIGH"=> "MEDIUM"=> "LOW" );

      
    // recupero i dati dai campi del form
        
    $to               $_POST['destinatario'];     
        
    $from             $_POST['mittente'];
        
    $INCIDENT         $_POST['Ticket'];
        
    $AREA             $_POST['Area'];
        
    $SERVIZIO         $_POST['Servizio'];
        
    $INDICEPRIORITA   $_POST['Priorita'];


      
    // richiamo la funzione phpmailer che avr? caricato sul mio server
      // require_once('class.phpmailer.php');
         
    require_once 'PHPMailer/PHPMailerAutoload.php';

        
    $mail = new PHPMailer(false);

        
    $mail->SMTPDebug 0;

        
    $mail->IsSMTP();
        
    $mail->IsHTML(true);
        
        
    $mail->WordWrap   80;
        
        try {
          
    $mail->Host       "smtp.gmail.com";
          
    $mail->Port       465;
          
    $mail->SMTPAuth   true;
          
    $mail->SMTPSecure "ssl";
          
    $mail->Username   "CAMBIAMI@gmail.com";
          
    $mail->Password   "CAMBIAMI";

          
    $mail->SetFrom($from$from);
          
    $mail->AddReplyTo($from$from);
          
    $mail->AddAddress($to);


          
    $mail->Subject $INCIDENT " - " $SERVIZIO " - " $Priorita[$INDICEPRIORITA];

          
    $eM_body  ="<p>Control Room Web Portal - Nuovo Incident :</p>";
          
    $eM_body .="<p>Area : $AREA<br>Tipologia Fault : $TOPOLOGIA_FAULT<br>Tipologia Cliente : $Tipo_cliente<br>Urgenza : $Urgenza<br><div>Descrizione Incident : $Descrizione<br><br>Aperto da : $User_Open$_POST['nome'] . "</p>";

          
    $mail->Body    $eM_body;

          
    $mail->AltBody $INCIDENT " - " $SERVIZIO " - " $Priorita[$INDICEPRIORITA];

          
    $ris $mail->Send();
        }
        catch (
    phpmailerException $e) { echo $e->errorMessage(); } // PHPMailer error messages
        
    catch (Exception $e)          { echo $e->getMessage(); }   // anything else error messages
     
      
    if($ris) { echo "<h2>Il tuo messaggio ? stato inviato correttamente.</h2>"; }
      else     { echo 
    "<br /><br />Ritenta l?invio tornando alla pagina del modulo."; }
    ?> 
    questo é il risultato

    upload_2019-2-7_20-36-27.png
     
Sto caricando...

Condividi questa Pagina