2016-10-26 1 views
-1

Я написал функцию php mail, чтобы позволить пользователю на моем сайте заполнить форму и отправить форму на мой адрес электронной почты. поскольку вопрос говорит, что электронная почта работает, как только пользователь отправляет форму, но она появляется только в моей папке электронной почты нежелательной почты, я не разработчик php, но после некоторых исследований я заметил, что многие люди упоминают о PHPMailer, о которых я никогда не слышал или используется ранее.Как сделать сообщение электронной почты во входящих и не для нежелательной почты (php)

Я бы очень признателен за помощь.

$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

Вы спрашиваете, как использовать phpmailer? У них есть [пример github] (https://github.com/PHPMailer/PHPMailer). –

+0

Ваш текст должен быть полным html, чтобы он работал правильно, начиная с типа doctype. Только правильно отформатированные html-письма доставляются во входящие. –

+0

У вас нет адреса, принимающий сервер будет отмечать его как спам, поскольку он не исходит из правильного адреса. – Blinkydamo

ответ

0

Вы используете электронную почту от их публикуемых переменного в вашем заголовке. Когда ваш почтовый сервер получит это, он будет выглядеть как поддельный, потому что он есть. Ваш сайт не будет одной из настроек почтовых серверов для этого домена.

При настройке записей MX и DNS для электронной почты вы используете SPF или ключ для подтверждения того, кто отправил сообщение, и что он пришел с доверенного почтового сервера для этого домена. Вы можете захотеть изменить это, чтобы быть почтой и доменом, которым вы управляете. Вы все равно получаете электронную почту в теле.

Худший случай, если у вас нет контроля над записями SPF, вы могли бы по крайней мере пометить его по электронной почте, считая, что это то, что вы контролируете, как всегда доверяете, чтобы оно не попадало в вашу нежелательную почту.

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

спасибо за ваш комментарий, где я могу добавить эту переменную – cazlouise

+0

Замените строку в заголовке текущим из с переменной электронной почты – Joel

+0

Это указано в документах PHPMailer. – Synchro