RISOLTO PHPMailer problema inviare mail

keyezen

Nuovo Utente
50
5
CPU
Intel Coffee Lake i5-8300H
RAM
16GB DDR4
GPU
NVIDIA GeForce GTX 1050 Mobile
OS
Windows 11 Pro
Buongiorno,
ho un problema con con un form e PHPMailer. in pratica ho un form che permette di mandare le mail, ma quando me la invia al posto della mail che metto del form mi invia la mail con l'username che ho inserito. sapete come posso risolvere sta cosa?

funzione che manda la mail
PHP:
if (isset($_POST['invia'])) {
        require_once "PHPMailer/PHPMailer.php";
        require_once "PHPMailer/SMTP.php";
        require_once "PHPMailer/Exception.php";
        $mail = new PHPMailer(true);

        //SMTP Settings
        $mail->SMTPDebug = 1;
        $mail->isSMTP();
        $mail->Host = "smtp.gmail.com"; // smtp address of your email
        $mail->SMTPAuth = true;
        $mail->Username = "miaMail@gmail.com";
        $mail->Password = "mailPassword";
        $mail->Port = 587;  // port
        $mail->SMTPSecure = "tls";  // tls or ssl
        $mail->smtpConnect(['ssl' => ['verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true]]);

        //Email Settings
        $mail->isHTML(true);
        $mail->setFrom($_POST["mailLettore"], $_POST["nome"]);
        $mail->addAddress("miaMail@gmail.com");
        $mail->Subject = ($_POST['titolo']);
        $mail->Body = $_POST['messaggio'];
        if ($mail->send()) {
          header('location:about.php');
        } else{
          header('location:index.php');
        }
    }

form
HTML:
    <section class="ftco-section contact-section">
      <div class="container mt-12">
        <div class="row block-9">
          <div class="col-md-1"></div>
          <div class="col-md-12 ftco-animate">
            <form action="about.php" method="post" class="contact-form">
              <div class="row">
                <div class="col-md-6">
                  <div class="form-group">
                    <input type="text" class="form-control" placeholder="Il tuo nome" name="nome">
                  </div>
                </div>
                <div class="col-md-6">
                  <div class="form-group">
                    <input type="text" class="form-control" name="mailLettore" placeholder="la tua mail">
                  </div>
                  </div>
              </div>
              <div class="form-group">
                <input type="text" class="form-control" placeholder="Titolo" name="titolo">
              </div>
              <div class="form-group">
                <textarea name="messaggio" cols="30" rows="7" class="form-control" placeholder="Messaggio"></textarea>
              </div>
              <br />
              <div class="form-group">
                <input type="submit" name="invia" class="btn btn-primary py-3 px-5">
              </div>
            </form>
          </div>
        </div>
      </div>
    </section>

Grazie mille
 

cdtux

Utente Èlite
1,767
820
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Con gmail (ma anche con altri *) non puoi dato che sovrascrive il "sender": https://github.com/PHPMailer/PHPMailer/issues/1214

Fatti un alias su gmail in modo che riesci a filtrare tutte le richieste che ti vengono inviate dal sito web. I dati (occhio al GPDR) di chi ti ha inviato la richiesta li inserisci poi nel corpo del messaggio

EDIT: * per una questione di sicurezza in modo da evitare phishing
 
Ultima modifica:

keyezen

Nuovo Utente
50
5
CPU
Intel Coffee Lake i5-8300H
RAM
16GB DDR4
GPU
NVIDIA GeForce GTX 1050 Mobile
OS
Windows 11 Pro
Ho creato l'alias e messo a posto anche la password, però mi da lo stesso problema. provo a rimettere il codice, probabilmente sono io che ho capito male un pezzo

PHP:
        //SMTP Settings
        $mail->SMTPDebug = 1;
        $mail->isSMTP();
        $mail->Host = "smtp.gmail.com"; // smtp address of your email
        $mail->SMTPAuth = true;
        $mail->Username = "alliasCheHoCreato";
        $mail->Password = "mailPassowrd";  // your mail password
        $mail->Port = 587;  // port
        $mail->SMTPSecure = "tls";  // tls or ssl
        $mail->smtpConnect(['ssl' => ['verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true]]);

        //Email Settings
        $mail->isHTML(true);
        // Il problema viene qua, io in teoria lì metto la mail che l'utente mi passa
        // nel form, però a me qua da la mail che ho messo in $mail->Username
        $mail->setFrom($_POST['mailLettore'], $_POST['nome']);
        $mail->addAddress("sfiziositadagustareblog@gmail.com");
        $mail->Subject = ($_POST['titolo']);
        $mail->Body = $_POST['messaggio'];
        $mail->send();
 

cdtux

Utente Èlite
1,767
820
CPU
I7 3770
Scheda Madre
Asrock Z77 Extreme 4
HDD
Samsung 850 pro 250GB
RAM
Corsair Vengeance LP 16GB
GPU
Gigabyte GTX1060 6GB
Monitor
Dell U2412M
PSU
Seasonic Focus Plus 650
Case
Corsair Graphite 760T
OS
Debian / Ubuntu
Sotto ti ho aggiornato il codice con commenti (da testare dato che non scrivo php da tanto e potrei aver fatto qualche errore).
In sostanza:
- Nei settings dell'smtp ci devi mettere i dati della tua mail (username/password)
- La mail di alias la devi mettere nel "setFrom"
- La mail del lettore e il nome vanno nel corpo del messaggio o nel campo "addReplyTo" (o in entrambi)

PHP:
        //SMTP Settings
        $mail->SMTPDebug = 1;
        $mail->isSMTP();
        $mail->Host = "smtp.gmail.com"; // smtp address of your email
        $mail->SMTPAuth = true;
        $mail->Username = "TUOUSERNAMEGMAILPRINCIPALE@gmail.com"; // MODIFICATO
        $mail->Password = "GMAILPASSWORD";  // MODIFICATO
        $mail->Port = 587;  // port
        $mail->SMTPSecure = "tls";  // tls or ssl
        $mail->smtpConnect(['ssl' => ['verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true]]);
      
        // GENERA EMAIL BODY
        $msg = 'Qui crei il tuo messaggio da mettere nel body';
        $msg .= 'puoi mettere la mail del mittente qua ad esempio';
        $msg .= 'mail: ' . $_POST['mailLettore'] . ' nome: ' . $_POST['nome'];
        $msg .= $_POST['messaggio'];
  
        //Email Settings
        $mail->isHTML(true);

        //I riferimenti del lettore oltre che nel corpo della mail
        //Li puoi mettere anche nel campo addReplyTo
        $mail->addReplyTo($_POST['mailLettore'], $_POST['nome']);

        $mail->setFrom('EMAILALIAS@gmail.com', 'NOMEALIAS'); // MODIFICATO
        $mail->addAddress("TUOINDIRIZZOMAIL@gmail.com"); // MODIFICATO
        $mail->Subject = ($_POST['titolo']);
        $mail->Body = $msg; // MODIFICATO
        $mail->send();
 
Ultima modifica:
  • Mi piace
Reazioni: keyezen

Entra

oppure Accedi utilizzando