Ho acquistato un modello di sito Web semplice con un modulo di contatto php. Tutto funziona alla grande con l'unica piccola eccezione di ricevere effettivamente i messaggi inviati tramite il modulo. Cioè, il modulo di contatto mostrerebbe un messaggio di successo, ma il messaggio non arriverà mai.indirizzo di risposta nel modulo di contatto php
Dopo un lungo back and forth con il mio servizio di hosting, ho scoperto che per evitare spoofing non consentono l'invio di e-mail dove l'indirizzo FROM non ospita. Cioè, se un visitatore del sito scrive la sua gmail/yahoo ecc. Nel modulo, non lo capisco.
Hanno suggerito di utilizzare l'indirizzo di posta elettronica ospitato con loro come indirizzo DA e di ricevere l'email di input del visitatore come indirizzo REPLY-TO. Questo sembra ragionevole.
Così ho scavato in giro (per esempio qui: PHP reply-to error - comes with admin email not sender of contact form e php Contact Form on website and reply-to email)
e le risposte suggeriscono qualcosa l'aggiunta di un componente di intestazioni:
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
e anche aggiungere alla
mail($to, $subject, $message, $headers);
quindi è quello che ho fatto. $ email è definita in questo modello come quello che e-mail del visitatore, così quello che ho fatto è stato:
$subject = "Contact Form: $name";
$message = "$message";
$headers = 'From: [email protected]_domain.com' . "\r\n" .
'Reply-To: $email' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
Questo è tutto bello e dandy, ma ancora non funziona bene. Messaggi di posta elettronica Do passare attraverso la società, ma i dettagli sono:
from: [email protected]_domain.com via servername.hosting_company.com
**reply-to: [email protected]_company.com**
to: [email protected]_domain.com
così, la risposta al indirizzo non è ancora quello che il visitatore a sinistra.
Potete aiutarmi con questo? Non so cos'altro posso fare.
Grazie mille!
se qualcuno è interessato, ecco il file php completo:
<?php
// Clean up the input values
foreach($_POST as $key => $value) {
if(ini_get('magic_quotes_gpc'))
$_POST[$key] = stripslashes($_POST[$key]);
$_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
}
// Assign the input values to variables for easy reference
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];
// Test input values for errors
$errors = array();
if(strlen($name) < 2) {
if(!$name) {
$errors[] = "You must enter a name.";
} else {
$errors[] = "Name must be at least 2 characters.";
}
}
if(!$email) {
$errors[] = "You must enter an email.";
} else if(!validEmail($email)) {
$errors[] = "You must enter a valid email.";
}
if(strlen($message) < 10) {
if(!$message) {
$errors[] = "You must enter a message.";
} else {
$errors[] = "Message must be at least 10 characters.";
}
}
if($errors) {
// Output errors and die with a failure message
$errortext = "";
foreach($errors as $error) {
$errortext .= "<li>".$error."</li>";
}
die("<span class='failure'><h3>Sorry, The following errors occured:</h3><ol>". $errortext ."</ol><a href='contact.html' class='more'>Refresh Form</a></span>");
}
// --------------------------------------//
// Send the email // INSERT YOUR EMAIL HERE
$to = "[email protected]_domain.com";
// --------------------------------------//
$subject = "Contact Form: $name";
$message = "$message";
$headers = 'From: [email protected]_domain.com' . "\r\n" .
'Reply-To: $email' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
// Die with a success message
die("<span class='success'><h3>Successfully Sent!</h3> Your message is on its way, we will respond to you shortly.</span>");
// A function that checks to see if
// an email is valid
function validEmail($email)
{
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
$isValid = false;
}
else
{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64)
{
// local part length exceeded
$isValid = false;
}
else if ($domainLen < 1 || $domainLen > 255)
{
// domain part length exceeded
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.')
{
// local part starts or ends with '.'
$isValid = false;
}
else if (preg_match('/\\.\\./', $local))
{
// local part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
{
// character not valid in domain part
$isValid = false;
}
else if (preg_match('/\\.\\./', $domain))
{
// domain part has two consecutive dots
$isValid = false;
}
else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
str_replace("\\\\","",$local)))
{
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/',
str_replace("\\\\","",$local)))
{
$isValid = false;
}
}
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
{
// domain not found in DNS
$isValid = false;
}
}
return $isValid;
}
?>
È necessario utilizzare le virgolette doppie attorno alla stringa $ headers quando lo si crea: le virgolette singole trattano la stringa come letterale, quindi le variabili non vengono interpolate. – andrewsi
Grazie mille mcuh @andrewsi! :) – MajorKooter