2013-09-25 37 views
6

Tôi đã mua một mẫu trang web đơn giản với biểu mẫu liên hệ php. Mọi thứ hoạt động tốt với một ngoại lệ nhỏ thực sự nhận được các tin nhắn được gửi qua biểu mẫu. Đó là, biểu mẫu liên hệ sẽ hiển thị thông báo thành công, nhưng thông báo sẽ không bao giờ đến.địa chỉ trả lời trong biểu mẫu liên hệ php

Sau một thời gian dài quay trở lại với dịch vụ lưu trữ của mình, tôi phát hiện ra rằng để tránh giả mạo, họ sẽ không cho phép gửi email đến địa chỉ FROM mà họ không lưu trữ. Đó là, nếu một người truy cập vào trang web viết xuống gmail/yahoo của mình, vv trong biểu mẫu, tôi sẽ không nhận được nó.

Họ đã đề xuất sử dụng địa chỉ email được lưu trữ cùng với địa chỉ FROM và có email đầu vào của khách truy cập làm địa chỉ REPLY-TO. Điều này có vẻ hợp lý.

Vì vậy, tôi đào xung quanh (ví dụ ở đây: PHP reply-to error - comes with admin email not sender of contact formphp Contact Form on website and reply-to email)

và các câu trả lời gợi ý một cái gì đó thêm một thành phần tiêu đề:

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

và cũng thêm nó vào

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

vì vậy đó là những gì tôi đã làm. $ email được xác định trong mẫu này là gì email của khách truy cập, vì vậy những gì tôi đã làm là:

$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); 

này là tất cả tốt đẹp và dandy nhưng nó vẫn không hoạt động tốt. Email làm đi qua bây giờ, nhưng các chi tiết như sau:

from: [email protected]_domain.com via servername.hosting_company.com 
**reply-to: [email protected]_company.com** 
to: [email protected]_domain.com 

như vậy, câu trả lời đến địa chỉ vẫn không phải là những gì người truy cập trái.

Bạn có thể giúp tôi với điều này không? Không biết những gì khác tôi có thể làm.

Rất cám ơn!


nếu có ai quan tâm, đây là file php đầy đủ:

<?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; 
} 

?> 
+3

Bạn cần sử dụng dấu ngoặc kép quanh chuỗi tiêu đề $ khi bạn tạo nó - một dấu nháy đơn xử lý chuỗi dưới dạng chữ, vì vậy các biến không được nội suy. – andrewsi

+0

Cảm ơn bạn rất mcuh @ andrewsi! :) – MajorKooter

Trả lời

9

Hãy thử thay đổi này là một phần của mã của bạn:

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

Để này:

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

Về cơ bản, hãy lấy ra $ email từ bên trong dấu nháy đơn và nối nó vào chuỗi

+0

cảm ơn cả hai. điều này dường như hoạt động. tôi không có nghiệp để chia sẻ ... xin lỗi – MajorKooter

+0

@MajorKooter - nếu làm việc này, bạn có thể đánh dấu câu trả lời này là Đã chấp nhận. – andrewsi

+1

@andrewsi cảm ơn, mặc dù bạn xứng đáng nhận được tín dụng vì đây là những gì tôi đã sử dụng. cám ơn bạn đã góp ý. – MajorKooter

Các vấn đề liên quan