php联系表单代码无效

I have been working on my site and suddenly found that it doesn't send email on my website domain such as email@domain.com but it still send email at name@gmail.com

so i have no idea, tried many scripts and code and tried to cross check many things but all fails. Further i am unable to investigate the code that why is this happening. I hope someone can here check the code and help me find the bug so that i can fix it.

<?php
if(isset($_POST['email'])) {

    // EDIT THE 2 LINES BELOW AS REQUIRED
   $email_to = "name@domain.com,name@gmail.com"; 
    $email_subject = "Contact Form Request";
    function died($error) {
        // your error code can go here
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }
    // validation expected data exists
    if(!isset($_POST['name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['subject']) ||
        !isset($_POST['message'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }
    $name = $_POST['name']; // required
    $email = $_POST['email']; // required
    $subject = $_POST['subject']; // not required
    $message = $_POST['message']; // required
    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
 /*   $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$name)) {
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  }
  if(!preg_match($string_exp,$last_name)) {
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />';
  } */

  if(strlen($message) < 2) {
    $error_message .= 'The Comments you entered do not appear to be valid.<br />';
  }
  if(strlen($error_message) > 0) {
    died($error_message);
  }
    $email_message = "Form details below.

";
    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }
    $email_message .= "Name: ".clean_string($name)."
";
    $email_message .= "Email: ".clean_string($email)."
";
    $email_message .= "Subject: ".clean_string($subject)."
";
    $email_message .= "Message: ".clean_string($message)."
";

// create email headers
//  $headers = 'From: '.$email."
".
$headers = "From: username@gmail.com";
'Reply-To: '.$email."
" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);  
 echo "<h1>THANK YOU!!!</h1><br><h3>Thank you for submitting the form. We will contact you soon!</h3>";
}

?>

Have you tried to force return-path using the 5th parameter of mail() ?

Take a look here: https://translate.google.de/translate?sl=de&tl=en&js=y&prev=_t&hl=de&ie=UTF-8&u=http%3A%2F%2Fwww.codemercenary.de%2F2010%2F02%2Freturn-path-bei-php-mail-erzwingen.html&edit-text=&act=url

It could be the part your configuration is missing ;)

This might be the issue with MX entry.

Login to your cPanel

  1. Click on MX Entry Icon under email.
  2. Select the domain from the dropdown that has your form.
  3. Select Remote email exchanger

Then Hit change

Your script is OK. It is hosted on domain.com. if you do unit test like :

mail('name@domain.com,name@gmail.com', 'my subject', 'my message');

then you get one message in gmail inbox and no message in domain inbox.

It may be a problem of delivrability due to bad headers (it is not necessarily in spam folder, it can be blocked before by your hoster). What you can do is :

  • read spam policy of domain.com mailboxes and check your settings.
  • check DNS and MX entries for your mailbox name@domain.com with this tool : http://mailboxtools.com/tools/smtptest.aspx
  • check your SPF record with this tool : http://www.kitterman.com/spf/validate.html,
  • use these tools to send an email with your script and get the results.
  • check full headers of the email received at gmail (menu "show original") and try to interpret.
  • check your spam score when sending from you script if you send an email to the temporary address given by this tool