[PHP] Invio mail automatico dopo compilazione form - db

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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 ?
 

mr.x

Utente Attivo
9 Apr 2016
252
25
28
Inserisci la funzione di invio email dopo la query di inserimento dati presi dal form
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
Ok... puoi aiutarmi a capire come fare questa funzione ? E questo che non riesco a capire, come sia il codice da scrivere ...
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
Allora, ho provato a inserire questa funzione, dopo il richiamo all'inserimento dei dati nel db (mysqli_query) :
PHP:
$nome_mittente = "xxxxxxxxxxxxxxx";
$mail_mittente = "[email protected]";
$mail_destinatario = "[email protected]";

$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:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
@Borghese
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008

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
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
@Borghese
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008

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

Scusa Max! Non ricapiterà :) Grazie!
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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 = "[email protected]";
      $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 ?!
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
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
 

kastaldi

Nuovo Utente
3 Feb 2016
21
0
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).
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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:

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
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;
 

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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....
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
puoi evitare if/else con questo codice,
PHP:
$priorita = array( 1 => "HIGH", 2 => "MEDIUM", 3 => "LOW" );

echo $priorita[2];

con il risultato

upload_2019-2-6_8-47-50.png
 
Ultima modifica:

Borghese

Nuovo Utente
3 Feb 2019
14
0
1
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:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
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( 1 => "HIGH", 2 => "MEDIUM", 3 => "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   = "[email protected]";
      $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
 
Discussioni simili
Autore Titolo Forum Risposte Data
U PHP bottone per invio mail o ritorno al form PHP 15
G Invio mail con php da dati prelevati da un database PHP 9
AC1 [PHP] Invio Mail PHP 18
A [PHP] Problema invio mail con funzione mail() PHP 3
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
paloppa [PHP] Invio mail da form dubbio PHP 17
F Form mail php errore invio PHP 5
Punix [PHP] problema script invio e-mail PHP 2
cobra_72 [PHP] problema invio multiplo allegati mail PHP 21
Z Limite invio newsletter con PHP - mail() PHP 4
E Rimuovere "dati in memoria" dopo invio mail [PHP] PHP 18
F Invio automatico mail php PHP 0
Francesco Polese Errore form invio mail+php PHP 22
R Errore invio mail in php PHP 1
M Errore invio mail da php Posta Elettronica 5
P invio mail da form con dati php PHP 7
webmachine Come programmare l'invio di una mail in PHP? PHP 1
M configurazione invio mail php PHP 25
S Form invio mail html, con invio tramite file denominato invio.php PHP 8
W problemi incomprensibili invio mail dal sito in PHP PHP 3
F invio di una mail tramite script php PHP 6
antonio_oti Invio di e-mail tramite PHP PHP 23
O [PHP] Problema Invio Mail PHP 2
S php form invio mail PHP 3
A invio mail con php PHP 6
N Invio dati su e-mail da fom php PHP 8
C problema invio mail con form php PHP 0
C Mail e php problema invio PHP 11
V Problema con l'invio delle mail in locale (usando quindi easy php) PHP 16
R Abilitare server php per invio mail PHP 12
SolidSnake4 invio mail html con php non va PHP 6
B Problema invio mail con script php verso i dominii libero PHP 9
M Invio dati database via email php PHP 0
K [php]form invio dati PHP 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
G Invio form con PHP PHP 3
A invio massivo dati a file php Javascript 4
P Funzione jQuery Ajax invio file a php jQuery 1
G creazione menu a tendina e invio a pagina php PHP 1
L [PHP] Invio Immagini PHP 1
I [PHP] Invio sms multipli PHP 4
A [PHP] Invio automatico dati da form PHP 6
ANDREA20 [PHP] Modulo email invio PHP 5
Shyson [PHP] Codice iscrizione e invio avviso nuovi articoli PHP 3
Tommy03 Errore invio email con PHP PHP 1
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
A [PHP] errore 404 e invio mai path pagina con link interrotto PHP 2
A [PHP] Invio messaggio a tutti gli iscritti PHP 2
M [PHP] Problema script ricezione e invio posta... PHP 1
C [PHP] Problema Invio Email Elseif PHP 2

Discussioni simili