adresse de réponse en php formulaire de contact

J'ai acheté un simple modèle de site web avec un formulaire de contact php. Tout fonctionne très bien avec une petite exception de recevoir les messages envoyés via le formulaire. Qui est, le formulaire de contact permettrait d'afficher un message de réussite, mais le message ne serait jamais arriver.

Après un long va et vient avec mon hébergeur, j'ai trouvé que dans le but d'éviter l'usurpation qu'ils ne permettent pas à des e-mails envoyé à PARTIR de l'adresse qu'ils n'hébergent pas. C'est, si un visiteur du site écrit son gmail/yahoo etc. dans la forme, je ne l'obtiendra pas.

Ils ont suggéré d'utiliser l'adresse e-mail a accueilli avec eux que l'adresse DE l'expéditeur, et avoir le visiteur à l'entrée de l'e-mail que l'adresse DE RÉPONSE. Cela semble raisonnable.

Alors j'ai creusé autour (par exemple ici:
PHP de réponse à l'erreur - vient avec l'admin email de l'expéditeur du formulaire de contact
et
php Formulaire de Contact sur le site et répondre à l'email )

et les réponses de proposer quelque chose de l'ajout d'un en-têtes de composant:

$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

et également ajouter à

mail($to, $subject, $message, $headers);

donc, c'est ce que j'ai fait.
$email est défini dans ce modèle que ce que l'e-mail du visiteur, donc ce que j'ai fait:

$subject = "Contact Form: $name";
$message = "$message";
$headers = 'From: myemail@my_domain.com' . "\r\n" .
    'Reply-To: $email' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

C'est tout beau et dandy, mais cela ne fonctionne toujours pas bien.
E-mails ne allez à travers maintenant, mais les détails sont les suivants:

from:    myemail@my_domain.com via servername.hosting_company.com 
**reply-to:  $email@servername.hosting_company.com**
to:  myemail@my_domain.com

donc, l'adresse de réponse est toujours pas ce que le visiteur gauche.

Pouvez-vous m'aider? Ne sais pas ce que je peux faire.

Merci beaucoup!


si quelqu'un est intéressé, voici le plein de fichier php:

<?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 = "myemail@my_domain.com";
//--------------------------------------//
$subject = "Contact Form: $name";
$message = "$message";
$headers = 'From: myemail@my_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;
}
?>
  • Vous devez utiliser des guillemets autour de $headers chaîne lorsque vous la créez - les guillemets simples traiter la chaîne comme un littéral, de sorte que les variables ne sont pas interpolées.
  • Merci à vous mcuh @andrewsi! 🙂
InformationsquelleAutor MajorKooter | 2013-09-25