PHP表单垃圾邮件过滤器

时间:2014-04-15 16:49:02

标签: php forms filter

所以我试图学习PHP,但我遇到了某些代码的问题。

我想要实现的是我的网站上有一个非常简单的评论表单,访问者可以使用它向我发送电子邮件,但我收到了大量垃圾邮件。

所以我想做的是放入一个隐藏的空字段然后只发送电子邮件,如果它是空的。如果任何人有建议他们将非常感激。

这是我的HTML代码:

<form id="contact" name="contact" method="post" action="send.php">
   <h3 class="send-comments-hdr">Your Comments?</h3>
   <ul class="form-holder">
      <li><label for="name" class="comment-labels">Name</label></li>
      <li><input type="text" name="name" id="name" class="comment-inputs" placeholder="Your Name"/></li>
      <li><label for="email-input" class="comment-labels">Email</label></li>
      <li><input type="email" name="email" id="email-input" class="comment-inputs" placeholder="your.name@example.com" /></li>
      <li><label for="comments" class="comment-labels">Comments</label></li>
      <li><textarea name="comments" id="comments" class="comment-inputs" rows="4"></textarea></li>
      <li class="center"><button id="send-comments" type="submit" class="send-button">Send</button></li>
   </ul>
</form>

我的PHP发送文件:

<?
$parent = $_SERVER["HTTP_REFERER"];

$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];

$to = "myemail@gmail.com";
$subject = "Comments From a Website Visitor";
$message = "<p>A visitor from mydomain.com has left the following comments:</p>";
$message .= '<html><body>';
$message .= '<table rules="all" style="border-color: #666" cellpadding="10">';
$message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>" . $name . "</td></tr>";
$message .= "<tr><td><strong>Email:</strong> </td><td>" . $email . "</td></tr>";
$message .= "<tr><td><strong>Comments:</strong> </td><td>" . $comments . "</td></tr>";
$message .= "</table>";
$message .= "</body></html>";
$message .= "<p>Please reply ASAP, Thank you.</p>";

$headers = "From: $name <$email>" . "\r\n";
$headers .= "Reply-To: $email" . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

if (mail($to, $subject, $message, $headers)) {
    header("Location:$parent"); 
}

?>

我昨天整天尝试了几个代码变体,但似乎无法让它工作。感谢所有建议,希望今天能学到一些东西。

3 个答案:

答案 0 :(得分:0)

首先将空字段添加到表单中。

<form id="contact" name="contact" method="post" action="send.php">
<input type="text" name="phone_number" id="phone_number">

添加到CSS文件中以将其与实际人员隐藏起来:

#phone_number { display: none; }

检查字段是否有检测垃圾邮件的内容:

if ($_POST['phone_number']) {
    echo "Thank you for your lovely spam.";
    exit();
}

答案 1 :(得分:0)

当垃圾邮件机器人第一次读取您的网站时,它会实际扫描并存储您的字段名称和表单的action="send.php"属性,然后在一定时间间隔内直接将数据转发给您的{ {1}}文件,因此它完全忽略了表单的新内容。

因此,为了立即解脱,您实际上想要这样做:

html页面

send.php

<强> send.php

<input type="hidden" name="HIDDEN_TRAP" value="" />
<!-- ^ Add this line inside of your <form> -->

答案 2 :(得分:-1)

此页面包含许多垃圾邮件发送者帐户:http://www.stopforumspam.com/您可以将该文件下载为CSV文件并使用php阻止它们。

最简单的必须是设定一个标准。以下是使用PHP创建验证码图像的教程:THENEWBOSTON

如果您认为垃圾邮件机器人用一些信息填充所有表单数据。基本上按照你的说法创建一个隐藏字段。

<input type="hidden" name="antibot" value="" />

和你的PHP代码:

if ( $_POST['antibot'] !== "" ) {
throw new Exception ("Bot detected.");
}else {
//--- THE REST OF YOUR CODE
}