2012-02-13 3 views
2

私のウェブサイトには、実際に動作する連絡フォームがあります:D 問題は、電子メールが迷惑メールフォルダで終わることです。私はヘッダーセクションで何かをしようとしましたが、何も動作していないようです。php email - スパムボックスにメールが届かないようにする方法

誰もがこれを手伝ってくれますか?

おかげ

<?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コードとは関係ありませんが、電子メールがサーバー上でホストされているドメインから送信されていることを確認してください。つまり、あなたのGmailアドレスをPHP経由で送信するのは悪い考えです。サーバーから出るすべての電子メールに署名し、SPFレコードが必要です

これは、通常、DNSで正しいSPFレコードが設定されていないためです。これは、使用するソフトウェアに応じて簡単に行うことができます。 cPanelを使用する場合、これはかなり2つのステップのプロセスです。

いくつかのリンク: http://www.emailquestions.com/help-desk/2418-why-do-my-own-emails-go-into-spam.html http://www.google.co.uk/search?ソースID =クロム&すなわち= 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です。

連絡先フォームがただ1つのメールフォルダにメールを送信するために使用されている場合は、迷惑メールとしてマークしないようにルールを設定します。どちらか、またはあなたのsmtpを実際に検証する。

0

スパムはいくつかの設定によってフィルタリングされません。あなたの言葉の選択、メッセージの表示方法、および送信者の電子メールアドレスの知られ方によってフィルタリングされます。あなたがスパムリストを避けたいのであれば、あなたはスパムを聞こえないように言葉で言わなければなりません。

0

お客様の電子メールアカウントではなく、メールを送信するために使用している実際のメールアカウントのメールアドレスをメールの送信元アドレスにすることをお勧めします。あなたの電子メールプロバイダは、電子メールがそのドメインのサーバからではなく、自分の電子メールアドレスから来た場合、その人が偽装していると思うかもしれません。

メールの本文に顧客のメールアドレスを入力して、誰からのメールかを知ることができます。

1

メッセージソースが有効であることを確認してください。それ以外に、PHPでできることはあまりありません。残りの部分は、メッセージの内容、メールサーバー、および受信者サーバーのスパムフィルターに至るまであります。

ヘッダーのデータが、通常のメッセージに通常表示されるデータと一致するようにしてください。たとえば、FromとReturn-Pathのドメイン名は、送信元のサーバーと一致するのが最善です。

\nを本文の行区切り文字として使用していることがわかりました。使用しているOSに関係なく、\r\nにする必要があります。

理想的には、試験RFC 2822。あなたがそれを行う時間がないなら、少なくともあなたのヘッダーを、あなたが有効であると信じる他の電子メールと比較してください。可能な場合は、適切な場所に同じ数の空白行を入れるなど、ヘッダーの順序を一致させてください。

0

私はGmailのと同様の問題を抱えていた、私は、電子メールを選択し、自分のサーバーから送信された「非迷惑メール」になりましたすべてのメールに設定誰かが自分のサイトの連絡先フォームを使用すると、Inboxフォルダになります。お役に立てれば。

関連する問題