Sendmail PHP invia mail vuote

  • Creatore Discussione Creatore Discussione Cry
  • Data di inizio Data di inizio

Cry

Nuovo Utente
25 Gen 2017
7
1
1
Salve a tutti, come da titolo ho un problema con il mio form per i contatti, tutto funziona bene, la mail arriva, ma è completamente vuota.

PHP:
<?php
    include('config.php');
 
    $email_to =   '[email protected]';
    $name     =   $_POST['name'];
    $email    =   $_POST['email'];
    $subject  =   $_POST['subject'];
    $message  =   $_POST['message'];
 

    $headers  = "From: $email\n";
    $headers .= "Reply-To: $email\n";
 
    if(mail($email_to, $subject, $message, $headers)){
        echo 'sent';
    }else{
        echo 'failed';
    }
?>

Premetto che non ho conoscenze di PHP, ma il mio obbiettivo era comunque di impostare un piccolo script per l'invio automatico di mail.
Purtroppo però qualcosa non funziona, ma non riesco a capire cosa, sembrerebbe che non vengano letti i campi del form, tutto però sembra a posto.

Invio anche il codice HTML del form

HTML:
            <div class="col-sm-6">
              <form id="main-contact-form" name="contact-form" role="form" method="post" action="sendmail.php">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="text" name="name" class="form-control" placeholder="Nome" required="required">
                    </div>
                  </div>
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="email" name="email" class="form-control" placeholder="E-Mail" required="required">
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <input type="text" name="subject" class="form-control" placeholder="Oggetto" required="required">
                </div>
                <div class="form-group">
                  <textarea name="message" id="message" class="form-control" rows="4" placeholder="Scrivi il messaggio" required="required"></textarea>
                </div>                     
                <div class="form-group">
                  <button type="submit" class="btn-submit">Invia</button>
                </div>
              </form> 
            </div>
 
Ultima modifica di un moderatore:
Ciao, ho provato il codice e funziona correttamente. ovviamente se non scrivi nulla nella textare la mail arriva vuota.
 
Appunto per questo, io compilo tutto il form, invio con il bottone e la mail arriva.
Ma risulta completamente vuota, non mi invia niente di ciò che ho inserito nel form
 
quello che ti arriva è solo il contenuto della textarea e cioè il campo "message"
prova a cambiare
Codice:
$message  =   $_POST['message'];
con
Codice:
$message = $_POST['message'] . " nome " . $_POST['nome'];
 
Forse non ci siamo capiti, a me non arriva proprio nulla, una mail vuota, senza mittente, oggetto e contenuto.
Il problema, probabilmente, è che non mi legge i campi dal form e spedisce quindi una mail bianca.

Il nome, non è usato, perché poi mi servirà per ampliare lo script, questa è solo una prova per vedere se funzionava, ma evidentemente ci sono già problemi qui che non riesco a capire
 
metti queste due righe nella pagina php prima di ogni altra istruzione e vedi cosa ti stampa
PHP:
<?php
var_dump($_REQUEST);
die();

edit:
non hai altro codice che interagisce con il form ? tipo javascript
 
Ultima modifica:
Ciao Marino, avevo letto la tua segnalazione. Non preoccuparti sopravviverò :-)
 
metti queste due righe nella pagina php prima di ogni altra istruzione e vedi cosa ti stampa
PHP:
<?php
var_dump($_REQUEST);
die();

edit:
non hai altro codice che interagisce con il form ? tipo javascript

Inserendo quelle 2 righe di codice, la mail non arriva più.

Si ho JQuary che mi fa il controllo dei campi sul form.
 
posta anche il codice che ti fa i controlli, sicuramente il problema è li
 
Codice:
    var form = $('#main-contact-form');
    form.submit(function(event){
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            url: $(this).attr('action'),
            beforeSend: function(){
                form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Invio E-mail in corso...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success"> Grazie per averci contattato, riceverai una risposta a breve.</p>').delay(3000).fadeOut();
        });
    });
 
manca il passaggio dei dati, non posso testare adesso, prova a cambiare la parte $ajax cosi
Codice:
$.ajax({
                url: $(this).attr('action'),
                data: $(this).serialize(),
                type: "POST",
                beforeSend: function () {
                    form.prepend(form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Invio E-mail in corso...</p>').fadeIn());
                }
            }).done(function (data) {
                form_status.html('<p class="text-success"> Grazie per averci contattato, riceverai una risposta a breve.</p>').delay(3000).fadeOut();
            });
e togli dal php quelle due righe che ti avevo fatto mettere
 
A me funziona
HTML:
<html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
        <script>
            $(document).ready(function () {
                var form = $('#main-contact-form');
                form.submit(function (event) {
                    event.preventDefault();
                    var form_status = $('<div class="form_status"></div>');
                    $.ajax({
                        url: $(this).attr('action'),
                        data: $(this).serialize(),
                        type: "POST",
                        beforeSend: function () {
                            form.prepend(form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Invio E-mail in corso...</p>').fadeIn());
                        }
                    }).done(function (data) {
                        form_status.html('<p class="text-success"> Grazie per averci contattato, riceverai una risposta a breve.</p>').delay(3000).fadeOut();
                    });
                });
            });

        </script>
    </head>
    <body>
        <div class="col-sm-6">
            <form id="main-contact-form" name="contact-form" role="form" method="post" action="sendmail.php">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                    <div class="col-sm-6">
                        <div class="form-group">
                            <input type="text" name="name" class="form-control" placeholder="Nome" required="required">
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <input type="email" name="email" class="form-control" placeholder="E-Mail" required="required">
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <input type="text" name="subject" class="form-control" placeholder="Oggetto" required="required">
                </div>
                <div class="form-group">
                    <textarea name="message" id="message" class="form-control" rows="4" placeholder="Scrivi il messaggio" required="required"></textarea>
                </div>                     
                <div class="form-group">
                    <button type="submit" class="btn-submit">Invia</button>
                </div>
            </form>
        </div>
    </body>
</html>
la pagina php
PHP:
<?php

$email_to = $_POST['email'];
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];


$headers = "From: $email\n";
$headers .= "Reply-To: $email\n";

if (mail($email_to, $subject, $message, $headers)) {
    echo 'sent';
} else {
    echo 'failed';
}
?>
A questo indirizzo trovi il codice online funzionante. Metti la tua mail nel form e vedrai che ti arriva completa.
 
Si ora funziona, ti ringrazio molto.
L'errore era nel java script per il controllo allora.

Grazie ancora.
 
  • Like
Reactions: criric

Discussioni simili