人。我一直在努力解决这个问题,但我对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 = "companyname@gmail.com";
$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 :(得分: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.!#$%&'*+\/=?^_`{|}~-]+@[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 = "companyname@gmail.com";
$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;
?>
答案 1 :(得分:0)
阻止垃圾邮件的最有效方法之一是确保每个字段都包含预期的内容。例如,名称应仅包括字母,电话号码等。如果不需要包含URLS的文本字段,则不提交邮件将消除大量垃圾邮件。
接下来,您可以使用蜜罐字段。这些是隐藏在人群中但通常由垃圾邮件机器人检测到的字段。如果提交内容包含任何内容,您可以检查提交内容,如果他们知道它是垃圾邮件。
您还可以检查表单页面显示和提交表单之间的时间。非常快速的提交表明已经发现了垃圾邮件。
Captcha应该是最后的手段,也许只有在其他技术提示垃圾邮件时才会显示。
最后,你可以通过使用一个为你做很多事情的课程,让自己的生活变得更轻松,例如: http://stefangabos.ro/php-libraries/zebra-form/或像http://wufoo.com
这样的表单构建应用