2016-08-09 76 views
1

guys。我一直試圖圍繞這一點,但我對PHP很陌生。我已經嘗試過各種PHP垃圾郵件過濾器的教程,但是當我將它們寫入表單時,它們都不起作用。在PHP聯繫表上過濾垃圾郵件

,我一直在試圖修改的代碼是:

<?php 
header ("Location: index.html"); 
if(!empty($_POST['topName']) || !empty($_POST['topEmail']) || !empty($_POST['topPhone'])) { 
    $name = $_POST['topName']; 
    $emailAddress = $_POST['topEmail']; 
    $phone = $_POST['topPhone']; 
    $message = $_POST['topMessage']; 

    $email_to = "[email protected]"; 
    $email_from = "$name <$emailAddress>"; 
    $email_subject = "Message from online contact form"; 
    $email_body = "From: $name\n" . 
        "Email: $emailAddress\n" . 
        "Phone: $phone\n\n" . 
        "$message"; 
    $email_headers = "From: $email_from \r\n" . 
       "Reply-To: $emailAddress \r\n"; 

    mail($email_to, $email_subject, $email_body, $email_headers); 
} 
exit; 
?> 

其工作被添加!empty的事情,但是那只有一部分仍只攔截垃圾郵件,留下這些領域的空白。當我遵循教程時,我似乎無法得到任何工作。有什麼我可以做一個超級簡單的垃圾郵件過濾器,或遵循一個新手可以理解的教程?

任何幫助或建議,將不勝感激!

+0

在PHP中執行表單數據驗證。這有助於防止漫遊器忽略javascript而忽略驗證。添加驗證碼或其他人工驗證系統。這可能與用戶在提交表單時必須填寫的小數學問題一樣簡單。 – Twisty

+0

可能試着從這裏開始:https://www.abeautifulsite.net/a-simple-php-captcha-script – Twisty

+0

您也可以檢查'$ _SERVER ['HTTP_USER_AGENT']'並確保提交者正在使用真實瀏覽器。 – Twisty

回答

0

爲了確保字段不爲空,您可以執行一些驗證,像這樣:

<?php 

function checkLength($d, $min, $max){ 
    if(strlen($d) > $max || strlen($d) < $min){ 
     return false; 
    } else { 
     return true; 
    } 
} 

function checkRegEx($d, $reg){ 
    return ereg($reg, $d); 
} 

$fields = [ 
    'name' => $_POST['topName'], 
    'email' => $_POST['topEmail'], 
    'phone' => $_POST['topPhone'] 
] 

$valid = true; 

// Check that each is not empty 
foreach($fields as $k => $v){ 
    $valid = $valid && !empty($v); 
} 

// Add HTML Safe Message 
$fields['message'] = htmlentities($_POST['topMessage']); 

// Check that name has enough characters 
$valid = $valid && checkLength($fields['name'], 3, 25); 

// Check that Email has enough characters 
$valid = $valid && checkLength($fields['email'], 5, 80); 

// Check Email format 
$valid = $valid && checkRegEx($fields['email'], "/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/"); 

if($valid) { 
    $email_to = "[email protected]"; 
    $email_from = "{$fields['name']} <{$fields['email']}>"; 
    $email_subject = "Message from online contact form"; 
    $email_body = ""; 
    $email_body .= "From: {$fields['name']}\r\n"; 
    $email_body .= "Email: {$fields['email']}\r\n"; 
    $email_body .= "Phone: {$fields['phone']}\r\n\r\n"; 
    $email_body .= $fields['message']; 
    $email_headers = "From: {$fields['email']}\r\n"; 
    $email_headers .= "Reply-To: {$fields['email']}\r\n"; 

    mail($email_to, $email_subject, $email_body, $email_headers); 
} 
exit; 
?> 
0

其中一個最有效的方法來阻止垃圾郵件是確保每個字段包含什麼預期。例如,名稱只能包含字母,電話號碼等。如果不需要包含URLS的文本字段,則不要在提交郵件時提交郵件將消除大量垃圾郵件。

接下來,您可以使用蜜罐字段。這些是從人們隱藏的字段,但通常被垃圾郵件機器人檢測到。如果他們包含任何內容,並且他們確實知道這是垃圾郵件,則檢查提交內容。

您還可以檢查表單頁面顯示時間和表單提交時間之間的時間。非常快速的提交表明垃圾郵件。

驗證碼應該是最後一招,也許只有當其他技術顯示垃圾郵件時纔會顯示。

最後,你可以通過使用一個爲你做很多事情的類來讓自己的生活更輕鬆,例如, http://stefangabos.ro/php-libraries/zebra-form/或表單構建應用程序http://wufoo.com