2012-02-13 3 views
2

내 웹 사이트에서 실제로 작동하는 연락처 양식이 있습니다. D 이메일이 스팸 폴더로 끝나는 것이 문제입니다. 헤더 섹션으로 작업을 시도했지만 아무것도 작동하지 않는 것 같습니다.PHP 이메일 - 스팸 상자에 메일이 오지 않게하는 방법

아무도 도와 줄 수 있습니까?

감사

<?php 
    ini_set("display_errors", "0"); 
    $post_data = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS); 

    $name = $post_data["name"]; 
    $email = $post_data["email"]; 
    $phone = $post_data["phone"]; 
    $website = $post_data["website"]; 
    $message = $post_data["message"]; 



    # select data that needs validation 
    $validate = array(
     'required' => array($name,$email,$message), 
     'validEmail' => array($email), 
     'validNumber' => array($phone), 
     'validAlpha' => array($name) 
    ); 
    $formcontent = "Name: $name \nE-Mail: $email \nPhone: $phone \nWebsite: $website \nMessage: $message \n"; 
    $formcontent = wordwrap($formcontent, 70, "\n", true); 

    $recipient = "[email protected]"; 
    $subject = "Contact Messenbrink.eu"; 

    /*$mailheader = "From: $email \r\n";**/ 

    $mailheader .= "Reply-To: $name <$email>\r\n"; 
    $mailheader .= "Return-Path: $name <$email>\r\n"; 
    $mailheader .= "Content-Type: text/plain\r\n"; 
    $mailheader .= "Organization: Sender Organization\r\n"; 
    $mailheader .= "MIME-Version: 1.0\r\n"; 
    $mailheader .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
    $mailheader .= "X-Priority: 3\r\n"; 
    $mailheader .= "X-Mailer: PHP". phpversion() ."\r\n"; 
    $mailheader .= "From: $name <$email>\r\n"; 

    function sendMail() { 
     global $formcontent, $recipient, $subject, $mailheader; 
     mail($recipient, $subject, $formcontent, $mailheader); 
    } 

    # error messages 
    $errorsMsgs = array(
     'required' => 'Please fill out all required fields.', 
     'validEmail' => 'is an invalid email address.', 
     'validNumber' => 'is an invalid number.', 
     'validAlpha' => 'contains invalid characters. This field only accepts letters and spaces.' 
    ); 

    $errorMarkup = "<h1>We found a few errors :-(</h1><h2>Please fix these errors and try again</h2><ol>"; 
    $errorMarkupEnd = "</ol>"; 
    $successMarkup = "<h1>Success!</h1><h2>Your form was sent successfully.</h2>"; 
    $backMarkup  = "<a href=\"" . $_SERVER['HTTP_REFERER'] . "\">Back to form</a>"; 

    # begin state 
    $valid = true; 

    # loop through fields of error types 
    foreach ($validate as $type => $fields) { 
     # loop through values of fields to be tested 
     foreach ($fields as $value) { 
      # throw error if value is required and not entered 
      if ($type === 'required' && strlen($value) === 0) { 
       $errorMarkup .= "<li>$errorsMsgs[$type]</li>"; 
       $valid = false; 
       break; 
      } 
      else if (
       $type === 'validEmail' && !filter_var($value, FILTER_VALIDATE_EMAIL) || 
       $type === 'validNumber' && !preg_match('/^[0-9 ]+$/', $value) || 
       $type === 'validAlpha' && !preg_match('/^[a-zA-Z ]+$/', $value) 
      ) { 
       if (strlen($value) === 0) {break;} # skip check if value is not entered 
       $errorMarkup .= "<li>\"$value\" $errorsMsgs[$type]</li>"; 
       $valid = false; 
       continue; 
      } 
     } 
    } 

    if ($valid) { 
     sendMail(); 
     $body = $successMarkup . $backMarkup; 
     $title = "Form sent"; 
    } else { 
     $body = $errorMarkup . $errorMarkupEnd . $backMarkup; 
     $title = "Form errors"; 
    } 

    # write html ouput 
    echo "<!DOCTYPE html><head><title>$title</title><style type=\"text/css\">body{margin:100px;font:16px/1.5 sans-serif;color:#111}h1{font-size:32px;margin:0;font-weight:bold}h2{font-size:18px;margin:0 0 20px 0}ol,li{list-style-position:inside;padding-left:0;margin-left:0}</style></head><body>$body</body></html>"; 
?> 

답변

5

PHP 코드와 아무 관련이 없지만 서버에서 호스팅되는 도메인에서 전자 메일을 보내고 있는지 확인하십시오. 즉, PHP를 전송할 때 Gmail 주소를 사용하는 것은 좋지 않을 것입니다. 서버를 나가는 모든 전자 메일에 서명하고 SPF 레코드가 있어야합니다.

이는 일반적으로 DNS에서 올바른 SPF 레코드가 설정되지 않았기 때문입니다. 이는 사용하는 소프트웨어에 따라 쉽게 수행 할 수 있습니다. cPanel을 사용한다면 두 단계의 과정이 필요합니다.

일부 링크 : http://www.emailquestions.com/help-desk/2418-why-do-my-own-emails-go-into-spam.html http://www.google.co.uk/search를?sourceid = 크롬 & 즉 = UTF-8 & Q = SPF + 기록 http://www.techtalkpoint.com/articles/setting-up-spf-records-in-cpanel-whm-and-namecheap/

+0

대단히 감사합니다. –

+0

또한 SMTP의 중요성이 중요합니다. 따라서 이메일이 반송되거나 매리리스트를 정리하지 않으면 IP 주소의 평판이 떨어집니다. 그리고 이메일이 스팸으로 끝날 가능성이 더 큽니다 (특히 핫, 야후, Gmail과 같은 큰 3 개 업체에서 유효 함) – Khuram

0

아마도 SMTP가 유효하지 않은 것을 사용하고 있습니다.

연락처 양식을 사용하여 하나의 메일 폴더로 전자 메일을 보내는 경우 스팸으로 표시되지 않도록 규칙을 설정하기 만하면됩니다. 어느 쪽이든 또는 실제로 귀하의 smtp를 확인하십시오.

0

스팸 메일은 일부 설정으로 필터링되지 않으며 단어 선택 및 메시지 표시 방법과 발신자 이메일 주소의 알려진 정도에 따라 필터링됩니다. 스팸 목록을 피하려면 스팸으로 들리지 않는 방식으로 단어를 사용해야합니다.

0

내 제안 중 하나는 이메일의 보낸 사람 주소가 고객의 이메일 계정이 아닌 실제 메일 계정의 이메일 주소가되도록하는 것입니다. 전자 메일 공급자가 해당 전자 메일 주소에서 온 것이지 해당 도메인의 서버에서 보낸 것이 아니라면 전자 메일 공급자가 스푸핑이라고 생각할 수 있습니다.

이메일의 본문에 고객의 이메일 주소를 입력하여 발신자를 알 수 있습니다.

1

메시지 소스가 올바른지 확인하십시오. 그것 이외에는 PHP에서 할 수있는 일이 많지 않습니다. 나머지는 메시지 내용, 메일 서버 및 수신자 서버의 스팸 필터입니다.

헤더의 데이터가 정상적인 메시지에 일반적으로 나타나는 것과 일치하는지 확인하십시오. 예를 들어 From 및 Return-Path 도메인 이름이 보내는 서버와 일치하는 것이 가장 좋습니다.

본문의 줄 구분 기호로 \n을 사용하기 만하면됩니다. 사용중인 OS와 관계없이 \r\n이어야합니다.

이상적으로는 연구 RFC 2822. 적어도 그렇게 할 시간이 없다면 유효하다고 생각되는 다른 이메일과 헤더를 비교하십시오. 가능한 경우 빈 줄 수를 같은 위치에 두는 것을 포함하여 머리글의 순서를 일치시킵니다.

0
I Gmail에서와 유사한 문제가 된

가, 난 그냥 이메일을 선택하여 설정 "스팸 메일"지금 내 서버에서 보낸 모든 이메일, 누군가 내 사이트의 연락처 양식을 사용하면받은 편지함 폴더로 이동합니다. 희망이 도움이됩니다.

관련 문제