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?
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?
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!
regolamento altervista_______________ regolamento forum
questo script funziona, possiamo sentirci privatamente per farle vedere il codice? grazie mille
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]
Se non invii alcun dato, è normale che ricevi un errore 403:
Come mai hai usato quella funzione?Codice PHP:
http_response_code(403);
Ciao!
regolamento altervista_______________ regolamento forum
non saprei con precisione, l'ha scritto un mio amico questo file php
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!
regolamento altervista_______________ regolamento forum
Questo è l'htmlCodice 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>
Ultima modifica di dreadnaut : 15-04-2024 alle ore 22.37.22
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.
[edit]Codice HTML:<form action="mail.php" class="row" id="contact-form" method="post">
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
Come From: devi usare il tuo indirizzo @altervista.org come suggerito sopra da Alemoppo.Codice PHP:
// Build the email headers.
$email_headers = "From: $name <$email>";
Ultima modifica di dreadnaut : 15-04-2024 alle ore 22.36.15
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!
regolamento altervista_______________ regolamento forum
Grazie mille a entrambi <3
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;
}
Già! Confronta l'HTML che hai postato sopra con quello del tutorial originale, e vedrai che mancano altri pezzi.
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
JavaScriptCodice 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>
PHPCodice: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); }
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?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.";
}
?>
Ultima modifica di alemoppo : 17-04-2024 alle ore 22.45.47 Motivo: +tag codice
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!
regolamento altervista_______________ regolamento forum
non saprei da dove iniziare a usare jquery, ho provato a usare la guida di sopra, ma non capisco molto
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!
regolamento altervista_______________ regolamento forum