Visualizzazione risultati 1 fino 17 di 17
Like Tree1Likes
  • 1 Post By dreadnaut

Discussione: Errore invio email tramite php!!!

  1. #1
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito Errore invio email tramite php!!!

    Sto riscontrando dei problemi sul mio sito, mentre provo ad inviare una mail tramite php, il mio sito da come errore
    Failed to load resource: the server responded with a status of 403 ()
    Come posso risolvere?

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Molto strano, al più le email non vengono inviate (in tal caso, ricorda di impostare 'From: tuosito@altervista.org').

    Puoi provare con lo script minimale?

    Ciao!

  3. #3
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    questo script funziona, possiamo sentirci privatamente per farle vedere il codice? grazie mille

  4. #4
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    Questo è il codice php, come posso risolvere?

    Codice PHP:
    <?php
    // Only process POST requests.
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Get the form fields and remove whitespace.
    $name = strip_tags(trim($_POST["name"]));
    $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $subject = trim($_POST["subject"]);
    $phone = trim($_POST["phone"]);
    $message = trim($_POST["message"]);

    // Check that data was sent to the mailer.
    if (empty($name) || empty($subject) || empty($message) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Set a 400 (bad request) response code and exit.
    http_response_code(400);
    echo
    "Si prega di compilare il modulo e riprovare.";
    exit;
    }

    // Set the recipient email address.
    // Note: Update this to your desired email address.
    $recipient = "email@email.email";

    // Set the email subject.
    $email_subject = "Nuovo Contatto $subject";

    // Build the email content.
    $email_content = "Nome: $name\r\n";
    $email_content .= "Email: $email\r\n";
    $email_content .= "Oggetto: $subject\r\n";
    $email_content .= "Telefono: $phone\r\n";
    $email_content .= "Messaggio: $message\r\n";

    // Build the email headers.
    $email_headers = "From: $name <$email>";

    // Send the email.
    if (mail($recipient, $email_subject, $email_content, $email_headers)) {
    // Set a 200 (okay) response code.
    http_response_code(200);
    echo
    "Grazie! Il tuo messaggio è stato inviato.";
    } else {
    // Set a 500 (internal server error) response code.
    http_response_code(500);
    echo
    "Ops! Qualcosa è andato storto e non siamo riusciti a inviare il tuo messaggio.";
    }

    } else {
    // Not a POST request, set a 403 (forbidden) response code.
    http_response_code(403);
    echo
    "Si è verificato un problema con l'invio, riprova.";
    }
    ?>
    Ultima modifica di alemoppo : 14-04-2024 alle ore 20.09.38 Motivo: +tag [php]

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Se non invii alcun dato, è normale che ricevi un errore 403:
    Codice PHP:
    http_response_code(403);
    Come mai hai usato quella funzione?

    Ciao!

  6. #6
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    non saprei con precisione, l'ha scritto un mio amico questo file php

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Comunque è normale ricevere un 403 se non invii alcun dato. Quella pagina la apri normalmente o con un form? Occorre fare un <form> in HTML di tipo POST con i parametri che accetta quello script.

    Ciao!

  8. #8
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    Codice HTML:
    <form action="mail.php" class="row" id="contact-form">
        <div class="col-md-6 col-12">
            <div class="single-personal-info">
                <label for="fname">Nome e Cognome</label>
                <input style="background-color:#dfdfdf;" type="text" id="name" placeholder="Inserisci Nome e Cognome" >                                         
            </div>
        </div>                            
        <div class="col-md-6 col-12">
            <div class="single-personal-info">
                <label for="email">Indirizzo Email</label>
                <input style="background-color:#dfdfdf;" type="email" id="email" placeholder="Inserisci Indirizzo Email" >                                         
            </div>
        </div>
        <div class="col-md-6 col-12">
            <div class="single-personal-info">
                <label for="phone">Numero Di Telefono</label>
                <input style="background-color:#dfdfdf;" type="text" id="phone" placeholder="Inserisci Numero">                                         
            </div>
        </div>                                      
        <div class="col-md-6 col-12">
            <div class="single-personal-info">
                <label for="subject">Oggetto</label>
                <input style="background-color:#dfdfdf;" type="text" id="subject" placeholder="Inserisci Oggetto">                                         
            </div>
        </div>                                      
        <div class="col-md-12 col-12">
            <div class="single-personal-info">
                <label for="message">Messaggio</label>
                <textarea style="background-color:#dfdfdf;" id="message" placeholder="Inserisci Messaggio"></textarea>                                        
            </div>
        </div>
        <div class="col-md-12 col-12 text-center">
            <input class="submit-btn" type="submit" value="Invia">
        </div>
    </form>
    Questo è l'html
    Ultima modifica di dreadnaut : 15-04-2024 alle ore 22.37.22

  9. #9
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Il codice viene da questo tutorial (ha più di 10 anni ) che ti spiega come funziona pezzo per pezzo — dagli un'occhiata.

    Il Tuo Amico™ ha tolto l'attributo method (che di default ha valore GET) mentre a te serve POST.
    Codice HTML:
     <form action="mail.php" class="row" id="contact-form" method="post">
    [edit]
    Oh, ad una seconda occhiata, non funzionerà, perché cerca di forzare l'email originale come mittente, cosa che nel 2024 finisce dritta nei controlli anti-spam
    Codice PHP:
    // Build the email headers.
    $email_headers = "From: $name <$email>";
    Come From: devi usare il tuo indirizzo @altervista.org come suggerito sopra da Alemoppo.
    Ultima modifica di dreadnaut : 15-04-2024 alle ore 22.36.15
    alemoppo likes this.

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Se non hai inserito dns aggiuntivi al tuo dominio di II livello, puoi utilizzare come dominio il tuo dominio di II livello.
    Consiglio comunque di utilizzare SendGrid o simili.

    Ciao!

  11. #11
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    Grazie mille a entrambi <3

  12. #12
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    Ora è invece questa sezione a darmi problemi, inizio a pensare che non riesca a prendere i dati dal form


    if (empty($name) || empty($subject) || empty($message) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Set a 400 (bad request) response code and exit.
    http_response_code(400);
    echo "Si prega di compilare il modulo e riprovare.";
    exit;
    }

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Già! Confronta l'HTML che hai postato sopra con quello del tutorial originale, e vedrai che mancano altri pezzi.

  14. #14
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    Ho dovuto modificare il codice solo che riesco a integrare jquery quindi sto usando uno script js molto più semplice, qui scrivo il codice

    HTML
    Codice HTML:
                             <form class="row" id="contact-form" method="post" action="">
                                <div class="col-md-6 col-12">
                                    <div class="single-personal-info">
                                        <label for="name">Nome e Cognome</label>
                                        <input style="background-color:#dfdfdf;" type="text" id="name" name="name" placeholder="Inserisci Nome e Cognome" >                                         
                                    </div>
                                </div>                            
                                <div class="col-md-6 col-12">
                                    <div class="single-personal-info">
                                        <label for="email">Indirizzo Email</label>
                                        <input style="background-color:#dfdfdf;" type="email" id="email" name="email" placeholder="Inserisci Indirizzo Email" >                                         
                                    </div>
                                </div>
                                <div class="col-md-6 col-12">
                                    <div class="single-personal-info">
                                        <label for="phone">Numero Di Telefono</label>
                                        <input style="background-color:#dfdfdf;" type="text" id="phone" name="phone" placeholder="Inserisci Numero">                                         
                                    </div>
                                </div>                                      
                                <div class="col-md-6 col-12">
                                    <div class="single-personal-info">
                                        <label for="subject">Oggetto</label>
                                        <input style="background-color:#dfdfdf;" type="text" id="subject" name="subject" placeholder="Inserisci Oggetto">                                         
                                    </div>
                                </div>                                      
                                <div class="col-md-12 col-12">
                                    <div class="single-personal-info">
                                        <label for="message">Messaggio</label>
                                        <textarea style="background-color:#dfdfdf;" id="message" name="message" placeholder="Inserisci Messaggio"></textarea>                                        
                                    </div>
                                </div>
                                <div class="col-md-12 col-12 text-center">
                                    <input class="submit-btn" type="submit" value="Invia" onclick="email()">
                                </div>
                            </form>
                            <p align="center" id="form-messages"></p>
    JavaScript
    Codice:
        	function email() {
    		  var xhttp = new XMLHttpRequest();
              var name = document.getElementById("name").innerHTML;
              var email = document.getElementById("email").innerHTML;
              var phone = document.getElementById("phone").innerHTML;
              var subject = document.getElementById("subject").innerHTML;
              var message = document.getElementById("message").innerHTML;
    		  xhttp.onreadystatechange = function() {
    		    if (this.readyState == 4 && this.status == 200) {
    		     document.getElementById("form-messages").innerHTML = this.responseText;
    		    }
    		  };
    		  xhttp.open("POST", "email.php", true);
    		  xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    		  xhttp.send(name&phone&email&subject&message);
    		}
    PHP
    Codice PHP:
    <?php

    // Only process POST reqeusts.
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Get the form fields and remove whitespace.
    $name = strip_tags(trim($_POST["name"]));
    $name = str_replace(array("\r","\n"),array(" "," "),$name);
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $message = trim($_POST["message"]);
    $subject = trim($_POST["subject"]);
    $number = $_POST["phone"];

    // Check that data was sent to the mailer.
    if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // Set a 400 (bad request) response code and exit.
    http_response_code(400);
    echo
    "Oops! There was a problem with your submission. Please complete the form and try again.";
    exit;
    }

    // Set the recipient email address.
    // FIXME: Update this to your desired email address.
    $recipient = "email@mail.com";



    // Build the email content.
    $email_content = "Nome: $name\n";
    $email_content .= "Numero: $number\n\n";
    $email_content .= "Email: $email\n\n";
    $email_content .= "Messaggio:\n$message\n";

    // Build the email headers.
    $email_headers = "Da: $name <$email>";

    // Send the email.
    if (mail($recipient, $subject, $email_content, $email_headers)) {
    // Set a 200 (okay) response code.
    http_response_code(200);
    echo
    "Thank You! Your message has been sent.";
    } else {
    // Set a 500 (internal server error) response code.
    http_response_code(500);
    echo
    "Oops! Something went wrong and we couldn't send your message.";
    }

    } else {
    // Not a POST request, set a 403 (forbidden) response code.
    http_response_code(403);
    echo
    "There was a problem with your submission, please try again.";
    }

    ?>
    Il problema è che la mail non viene inviata perché penso il sito dia priorità a qualcos'altro e non allo script js perché la pagina viene ricaricata. Qualche soluzione?
    Ultima modifica di alemoppo : 17-04-2024 alle ore 22.45.47 Motivo: +tag codice

  15. #15
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Non vedo jQuery ma un vecchissimo Ajax che mi ricorda i vecchi tempi!
    Dopo ajax per richieste asincrone si è iniziato ad usare jQuery, ora si usa direttamente fetch().

    Come mai necessiti di eseguire richieste asincrone? Non puoi semplicemente inviare il form senza usare javascript?

    Ciao!

  16. #16
    avid3968394 non è connesso Utente Blog
    Data registrazione
    15-02-2024
    Messaggi
    9

    Predefinito

    non saprei da dove iniziare a usare jquery, ho provato a usare la guida di sopra, ma non capisco molto

  17. #17
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,681

    Predefinito

    Rileggi il mio messaggio precedente, ti sconsiglio di usare sia jQuery, sia Ajax o in generale Javascript, specialmente agli inizi.

    Prova a fare un semplice form HTML a cui invii i dati che necessita lo script PHP.
    Tenendo come riferimento al guida che hai il codice identico al tuo, salta lo step 2.

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •