如何使电子邮件出现在收件箱而不是垃圾邮件(PHP)

时间:2016-10-26 12:48:59

标签: php email phpmailer

我写了一个php邮件功能,允许我网站上的用户填写表格并将表格发送到我的邮箱。正如问题所说,一旦用户发送表单,电子邮件正在工作,但它只出现在我的垃圾邮件文件夹中,我不是一个php开发人员,但在做了一些研究之后我注意到很多人提到PHPMailer我从未听说过或之前使用过。

我非常感谢哦帮助。

 $to="myemail.com";

    //Errors
    $nameError="";
    $emailError="";
    $errMsg="";


    $errors="";//counting errors


    $name="";
    $email="";
    $message="";
    if(isset($_POST['send'])){


            if(empty($_POST['yourname'])){ //name field empty

                    $nameError="Please enter your name";
                    $errors++; // increament errors
            }else{

                    $name= UserInput($_POST['yourname']);

                    if(!preg_match("/^[a-zA-Z ]*$/", $name)){

                            $nameError="Only letters and white space accepted";
                            $errors++;
                    }

            }

            if(empty($_POST['email'])){

                    $emailError="Enter email";
                    $errors++;
            }else{

                    $email = UserInput($_POST['email']);

                    if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)){

                            $emailError="Invalid Email";
                            $errors++;
                    }
            }


            if(empty($_POST['msg'])){

                    $errMsg="Enter message";
                    $errors++;
            }else{

                    $message=UserInput($_POST['msg']);
            }


            if($errors <=0){//No errors lets setup our email and send it

                     $headers = "MIME-Version: 1.0" . "\r\n";
                     $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
                     $headers .= 'From: <' . $email . '>' . "\r\n";


                    $text  = "<p>New Message from $name </p>";
                    $text .= "<p>Name : $name</p>";
                    $text .= "<p>Email : $email</p>";
                    $text .= "<p>Message : $message</p>";


                    mail($to, "Website Contact", $text, $headers);
                    $success="Thank your message was submitted";
                    $_POST= array(); //clearing inputs fields after success

            }


    }

//过滤用户输入

function UserInput($data){

        $data = trim($data);
        $data = stripcslashes($data);
        $data = htmlspecialchars($data);
        return $data;

}

1 个答案:

答案 0 :(得分:0)

您在标题中使用发布变量中的电子邮件。当您的电子邮件服务器收到此消息时,它看起来像是欺骗,因为它是。您的站点不会成为该域的邮件服务器设置之一。

在为电子邮件设置MX和DNS记录时,您可以使用SPF或密钥签名来证明发送邮件的人以及来自该域的受信任邮件服务器的邮件。您可能希望将from更改为您控制的电子邮件和域。无论如何,你正在收到他们的电子邮件。

最糟糕的情况是,如果您无法控制SPF记录,您至少可以标记来自电子邮件,假设它是您控制的内容,因为它始终受信任,因此不会进入您的垃圾邮件。

$headers .= 'From: <' . $to . '>' . "\r\n";